WEBVTT
Kind: captions
Language: en

00:00:00.000 --> 00:00:04.350 align:start position:0%
 
foreign

00:00:04.350 --> 00:00:04.360 align:start position:0%
 
 

00:00:04.360 --> 00:00:16.689 align:start position:0%
 
[Music]

00:00:16.689 --> 00:00:16.699 align:start position:0%
 
 

00:00:16.699 --> 00:00:19.370 align:start position:0%
 
library<00:00:17.699><c> is</c><00:00:18.060><c> something</c><00:00:18.180><c> that</c><00:00:18.660><c> generically</c>

00:00:19.370 --> 00:00:19.380 align:start position:0%
library is something that generically
 

00:00:19.380 --> 00:00:21.710 align:start position:0%
library is something that generically
just<00:00:19.560><c> takes</c><00:00:19.920><c> any</c><00:00:20.220><c> message</c><00:00:20.520><c> any</c><00:00:20.939><c> a</c><00:00:21.240><c> narratory</c>

00:00:21.710 --> 00:00:21.720 align:start position:0%
just takes any message any a narratory
 

00:00:21.720 --> 00:00:25.070 align:start position:0%
just takes any message any a narratory
length<00:00:22.080><c> message</c><00:00:22.320><c> as</c><00:00:23.100><c> in</c><00:00:23.400><c> a</c><00:00:23.520><c> sequence</c><00:00:23.699><c> of</c><00:00:23.880><c> bits</c>

00:00:25.070 --> 00:00:25.080 align:start position:0%
length message as in a sequence of bits
 

00:00:25.080 --> 00:00:27.890 align:start position:0%
length message as in a sequence of bits
of<00:00:25.439><c> any</c><00:00:25.619><c> length</c><00:00:25.980><c> and</c><00:00:26.460><c> It</c><00:00:26.580><c> just</c><00:00:26.760><c> fits</c><00:00:27.240><c> out</c><00:00:27.480><c> out</c>

00:00:27.890 --> 00:00:27.900 align:start position:0%
of any length and It just fits out out
 

00:00:27.900 --> 00:00:30.529 align:start position:0%
of any length and It just fits out out
of<00:00:28.019><c> that</c><00:00:28.260><c> 32</c><00:00:28.920><c> bytes</c><00:00:29.340><c> the</c><00:00:29.820><c> digest</c><00:00:30.240><c> of</c><00:00:30.420><c> this</c>

00:00:30.529 --> 00:00:30.539 align:start position:0%
of that 32 bytes the digest of this
 

00:00:30.539 --> 00:00:33.110 align:start position:0%
of that 32 bytes the digest of this
thing<00:00:30.720><c> is</c><00:00:30.900><c> 256</c><00:00:31.679><c> bits</c><00:00:32.099><c> the</c><00:00:32.460><c> procedure</c><00:00:32.820><c> to</c><00:00:33.000><c> go</c>

00:00:33.110 --> 00:00:33.120 align:start position:0%
thing is 256 bits the procedure to go
 

00:00:33.120 --> 00:00:35.630 align:start position:0%
thing is 256 bits the procedure to go
through<00:00:33.300><c> those</c><00:00:33.540><c> consists</c><00:00:34.260><c> of</c><00:00:34.380><c> three</c><00:00:34.680><c> parts</c><00:00:34.980><c> so</c>

00:00:35.630 --> 00:00:35.640 align:start position:0%
through those consists of three parts so
 

00:00:35.640 --> 00:00:37.549 align:start position:0%
through those consists of three parts so
I'll<00:00:35.820><c> just</c><00:00:36.000><c> go</c><00:00:36.180><c> over</c><00:00:36.300><c> the</c><00:00:36.480><c> three</c><00:00:36.660><c> parts</c><00:00:36.840><c> the</c>

00:00:37.549 --> 00:00:37.559 align:start position:0%
I'll just go over the three parts the
 

00:00:37.559 --> 00:00:40.310 align:start position:0%
I'll just go over the three parts the
first<00:00:37.680><c> part</c><00:00:37.980><c> is</c><00:00:38.399><c> breaking</c><00:00:39.300><c> your</c><00:00:39.480><c> message</c><00:00:39.719><c> into</c>

00:00:40.310 --> 00:00:40.320 align:start position:0%
first part is breaking your message into
 

00:00:40.320 --> 00:00:43.430 align:start position:0%
first part is breaking your message into
multiples<00:00:40.980><c> of</c><00:00:41.360><c> 64</c><00:00:42.360><c> bytes</c><00:00:42.780><c> so</c><00:00:42.960><c> those</c><00:00:43.140><c> are</c><00:00:43.320><c> the</c>

00:00:43.430 --> 00:00:43.440 align:start position:0%
multiples of 64 bytes so those are the
 

00:00:43.440 --> 00:00:46.729 align:start position:0%
multiples of 64 bytes so those are the
chunks<00:00:43.800><c> 512</c><00:00:44.760><c> bits</c><00:00:45.180><c> the</c><00:00:45.780><c> second</c><00:00:45.899><c> part</c><00:00:46.200><c> consists</c>

00:00:46.729 --> 00:00:46.739 align:start position:0%
chunks 512 bits the second part consists
 

00:00:46.739 --> 00:00:49.850 align:start position:0%
chunks 512 bits the second part consists
on<00:00:46.980><c> scheduling</c><00:00:47.940><c> words</c><00:00:48.239><c> Computing</c><00:00:49.020><c> a</c><00:00:49.559><c> bunch</c><00:00:49.680><c> of</c>

00:00:49.850 --> 00:00:49.860 align:start position:0%
on scheduling words Computing a bunch of
 

00:00:49.860 --> 00:00:51.770 align:start position:0%
on scheduling words Computing a bunch of
double<00:00:50.100><c> Words</c><00:00:50.399><c> which</c><00:00:50.820><c> are</c><00:00:50.940><c> four</c><00:00:51.120><c> bytes</c><00:00:51.539><c> each</c>

00:00:51.770 --> 00:00:51.780 align:start position:0%
double Words which are four bytes each
 

00:00:51.780 --> 00:00:53.650 align:start position:0%
double Words which are four bytes each
and<00:00:52.320><c> the</c><00:00:52.440><c> third</c><00:00:52.559><c> part</c><00:00:52.800><c> consists</c><00:00:53.399><c> on</c>

00:00:53.650 --> 00:00:53.660 align:start position:0%
and the third part consists on
 

00:00:53.660 --> 00:00:56.029 align:start position:0%
and the third part consists on
performing<00:00:54.660><c> a</c><00:00:54.840><c> bunch</c><00:00:54.960><c> of</c><00:00:55.079><c> rounds</c><00:00:55.440><c> which</c><00:00:55.920><c> is</c>

00:00:56.029 --> 00:00:56.039 align:start position:0%
performing a bunch of rounds which is
 

00:00:56.039 --> 00:00:57.470 align:start position:0%
performing a bunch of rounds which is
just<00:00:56.219><c> the</c><00:00:56.340><c> function</c><00:00:56.640><c> that</c><00:00:56.820><c> actually</c><00:00:57.000><c> does</c><00:00:57.239><c> the</c>

00:00:57.470 --> 00:00:57.480 align:start position:0%
just the function that actually does the
 

00:00:57.480 --> 00:00:59.450 align:start position:0%
just the function that actually does the
hashing<00:00:57.840><c> itself</c><00:00:58.140><c> the</c><00:00:58.500><c> function</c><00:00:58.920><c> that</c><00:00:59.100><c> is</c><00:00:59.280><c> not</c>

00:00:59.450 --> 00:00:59.460 align:start position:0%
hashing itself the function that is not
 

00:00:59.460 --> 00:01:01.610 align:start position:0%
hashing itself the function that is not
invertible<00:01:00.000><c> here's</c><00:01:00.539><c> just</c><00:01:00.719><c> a</c><00:01:00.899><c> brief</c>

00:01:01.610 --> 00:01:01.620 align:start position:0%
invertible here's just a brief
 

00:01:01.620 --> 00:01:04.070 align:start position:0%
invertible here's just a brief
description<00:01:02.460><c> of</c><00:01:02.760><c> this</c><00:01:03.300><c> this</c><00:01:03.420><c> slide</c><00:01:03.780><c> I</c><00:01:03.960><c> just</c>

00:01:04.070 --> 00:01:04.080 align:start position:0%
description of this this slide I just
 

00:01:04.080 --> 00:01:06.590 align:start position:0%
description of this this slide I just
stole<00:01:04.500><c> from</c><00:01:04.680><c> somewhere</c><00:01:04.979><c> in</c><00:01:05.159><c> the</c><00:01:05.280><c> internet</c><00:01:05.600><c> but</c>

00:01:06.590 --> 00:01:06.600 align:start position:0%
stole from somewhere in the internet but
 

00:01:06.600 --> 00:01:09.230 align:start position:0%
stole from somewhere in the internet but
I<00:01:07.320><c> want</c><00:01:07.380><c> to</c><00:01:07.560><c> go</c><00:01:07.740><c> in</c><00:01:07.979><c> some</c><00:01:08.280><c> detail</c><00:01:08.640><c> in</c><00:01:08.939><c> each</c><00:01:09.060><c> one</c>

00:01:09.230 --> 00:01:09.240 align:start position:0%
I want to go in some detail in each one
 

00:01:09.240 --> 00:01:11.690 align:start position:0%
I want to go in some detail in each one
of<00:01:09.360><c> the</c><00:01:09.479><c> three</c><00:01:09.659><c> parts</c><00:01:09.840><c> so</c><00:01:10.740><c> let's</c><00:01:10.920><c> start</c><00:01:11.220><c> with</c>

00:01:11.690 --> 00:01:11.700 align:start position:0%
of the three parts so let's start with
 

00:01:11.700 --> 00:01:14.030 align:start position:0%
of the three parts so let's start with
the<00:01:11.820><c> easiest</c><00:01:12.119><c> one</c><00:01:12.420><c> which</c><00:01:12.900><c> is</c><00:01:13.080><c> scheduling</c>

00:01:14.030 --> 00:01:14.040 align:start position:0%
the easiest one which is scheduling
 

00:01:14.040 --> 00:01:14.990 align:start position:0%
the easiest one which is scheduling
words

00:01:14.990 --> 00:01:15.000 align:start position:0%
words
 

00:01:15.000 --> 00:01:16.969 align:start position:0%
words
so<00:01:15.659><c> scheduling</c><00:01:16.080><c> words</c><00:01:16.260><c> as</c><00:01:16.500><c> you</c><00:01:16.619><c> see</c><00:01:16.799><c> here</c>

00:01:16.969 --> 00:01:16.979 align:start position:0%
so scheduling words as you see here
 

00:01:16.979 --> 00:01:19.490 align:start position:0%
so scheduling words as you see here
you're<00:01:17.700><c> given</c><00:01:18.119><c> a</c><00:01:18.240><c> message</c><00:01:18.479><c> let's</c><00:01:19.140><c> suppose</c>

00:01:19.490 --> 00:01:19.500 align:start position:0%
you're given a message let's suppose
 

00:01:19.500 --> 00:01:21.830 align:start position:0%
you're given a message let's suppose
that<00:01:19.619><c> we've</c><00:01:19.860><c> already</c><00:01:20.040><c> broken</c><00:01:20.400><c> the</c><00:01:20.759><c> message</c><00:01:20.939><c> in</c>

00:01:21.830 --> 00:01:21.840 align:start position:0%
that we've already broken the message in
 

00:01:21.840 --> 00:01:25.010 align:start position:0%
that we've already broken the message in
pieces<00:01:22.500><c> each</c><00:01:22.860><c> one</c><00:01:22.979><c> of</c><00:01:23.100><c> them</c><00:01:23.220><c> is</c><00:01:23.400><c> 64</c><00:01:23.759><c> bytes</c>

00:01:25.010 --> 00:01:25.020 align:start position:0%
pieces each one of them is 64 bytes
 

00:01:25.020 --> 00:01:27.490 align:start position:0%
pieces each one of them is 64 bytes
so<00:01:25.380><c> the</c><00:01:25.500><c> first</c><00:01:25.619><c> thing</c><00:01:25.740><c> you</c><00:01:25.979><c> do</c><00:01:26.220><c> is</c><00:01:26.759><c> you</c><00:01:27.000><c> compute</c>

00:01:27.490 --> 00:01:27.500 align:start position:0%
so the first thing you do is you compute
 

00:01:27.500 --> 00:01:31.370 align:start position:0%
so the first thing you do is you compute
48<00:01:28.500><c> double</c><00:01:28.979><c> words</c><00:01:29.340><c> four</c><00:01:30.060><c> bytes</c><00:01:30.479><c> each</c><00:01:30.780><c> the</c>

00:01:31.370 --> 00:01:31.380 align:start position:0%
48 double words four bytes each the
 

00:01:31.380 --> 00:01:33.950 align:start position:0%
48 double words four bytes each the
first<00:01:31.560><c> you</c><00:01:31.860><c> need</c><00:01:32.100><c> 64</c><00:01:32.640><c> in</c><00:01:32.880><c> total</c><00:01:33.119><c> the</c><00:01:33.479><c> first</c><00:01:33.659><c> 16</c>

00:01:33.950 --> 00:01:33.960 align:start position:0%
first you need 64 in total the first 16
 

00:01:33.960 --> 00:01:36.770 align:start position:0%
first you need 64 in total the first 16
are<00:01:34.619><c> your</c><00:01:34.860><c> your</c><00:01:35.159><c> message</c><00:01:35.460><c> are</c><00:01:35.880><c> the</c><00:01:36.060><c> 64</c><00:01:36.420><c> bytes</c>

00:01:36.770 --> 00:01:36.780 align:start position:0%
are your your message are the 64 bytes
 

00:01:36.780 --> 00:01:38.510 align:start position:0%
are your your message are the 64 bytes
that<00:01:36.900><c> you're</c><00:01:37.020><c> giving</c><00:01:37.200><c> these</c><00:01:37.860><c> are</c><00:01:37.979><c> 16</c><00:01:38.159><c> words</c>

00:01:38.510 --> 00:01:38.520 align:start position:0%
that you're giving these are 16 words
 

00:01:38.520 --> 00:01:40.730 align:start position:0%
that you're giving these are 16 words
with<00:01:39.180><c> those</c><00:01:39.360><c> 16</c><00:01:39.600><c> words</c><00:01:39.960><c> you</c><00:01:40.200><c> can</c><00:01:40.320><c> compute</c><00:01:40.619><c> the</c>

00:01:40.730 --> 00:01:40.740 align:start position:0%
with those 16 words you can compute the
 

00:01:40.740 --> 00:01:43.609 align:start position:0%
with those 16 words you can compute the
next<00:01:40.860><c> 16</c><00:01:41.100><c> words</c><00:01:41.479><c> and</c><00:01:42.479><c> with</c><00:01:42.900><c> those</c><00:01:43.079><c> 16</c><00:01:43.259><c> words</c>

00:01:43.609 --> 00:01:43.619 align:start position:0%
next 16 words and with those 16 words
 

00:01:43.619 --> 00:01:45.170 align:start position:0%
next 16 words and with those 16 words
that<00:01:43.860><c> you</c><00:01:43.979><c> just</c><00:01:44.100><c> compare</c><00:01:44.400><c> to</c><00:01:44.579><c> come</c><00:01:44.700><c> to</c><00:01:45.060><c> the</c>

00:01:45.170 --> 00:01:45.180 align:start position:0%
that you just compare to come to the
 

00:01:45.180 --> 00:01:46.730 align:start position:0%
that you just compare to come to the
next<00:01:45.299><c> ones</c><00:01:45.659><c> and</c><00:01:45.900><c> the</c><00:01:46.079><c> next</c><00:01:46.140><c> one</c><00:01:46.320><c> and</c><00:01:46.619><c> you</c>

00:01:46.730 --> 00:01:46.740 align:start position:0%
next ones and the next one and you
 

00:01:46.740 --> 00:01:49.249 align:start position:0%
next ones and the next one and you
compare<00:01:47.040><c> the</c><00:01:47.220><c> 64</c><00:01:47.579><c> that</c><00:01:47.820><c> you</c><00:01:47.939><c> needed</c><00:01:48.600><c> and</c><00:01:49.140><c> the</c>

00:01:49.249 --> 00:01:49.259 align:start position:0%
compare the 64 that you needed and the
 

00:01:49.259 --> 00:01:50.149 align:start position:0%
compare the 64 that you needed and the
important<00:01:49.500><c> thing</c><00:01:49.680><c> that</c><00:01:49.860><c> you</c><00:01:49.979><c> need</c><00:01:50.040><c> to</c>

00:01:50.149 --> 00:01:50.159 align:start position:0%
important thing that you need to
 

00:01:50.159 --> 00:01:52.370 align:start position:0%
important thing that you need to
remember<00:01:50.340><c> from</c><00:01:50.700><c> this</c><00:01:50.880><c> slide</c><00:01:51.119><c> is</c><00:01:51.659><c> that</c><00:01:51.960><c> to</c>

00:01:52.370 --> 00:01:52.380 align:start position:0%
remember from this slide is that to
 

00:01:52.380 --> 00:01:54.830 align:start position:0%
remember from this slide is that to
compute<00:01:52.740><c> those</c><00:01:53.040><c> scheduled</c><00:01:53.820><c> words</c><00:01:54.060><c> the</c><00:01:54.720><c> only</c>

00:01:54.830 --> 00:01:54.840 align:start position:0%
compute those scheduled words the only
 

00:01:54.840 --> 00:01:56.690 align:start position:0%
compute those scheduled words the only
thing<00:01:55.079><c> that</c><00:01:55.320><c> you</c><00:01:55.439><c> need</c><00:01:55.560><c> is</c><00:01:56.220><c> the</c><00:01:56.579><c> previous</c>

00:01:56.690 --> 00:01:56.700 align:start position:0%
thing that you need is the previous
 

00:01:56.700 --> 00:01:58.609 align:start position:0%
thing that you need is the previous
words<00:01:57.119><c> nothing</c><00:01:57.780><c> else</c>

00:01:58.609 --> 00:01:58.619 align:start position:0%
words nothing else
 

00:01:58.619 --> 00:02:00.710 align:start position:0%
words nothing else
that<00:01:59.159><c> means</c><00:01:59.460><c> that</c>

00:02:00.710 --> 00:02:00.720 align:start position:0%
that means that
 

00:02:00.720 --> 00:02:03.649 align:start position:0%
that means that
when<00:02:01.259><c> you're</c><00:02:01.380><c> scheduling</c><00:02:01.860><c> words</c><00:02:02.479><c> well</c><00:02:03.479><c> I</c>

00:02:03.649 --> 00:02:03.659 align:start position:0%
when you're scheduling words well I
 

00:02:03.659 --> 00:02:05.450 align:start position:0%
when you're scheduling words well I
think<00:02:03.780><c> the</c><00:02:03.899><c> consensus</c><00:02:04.320><c> people</c><00:02:04.920><c> are</c><00:02:05.159><c> starting</c>

00:02:05.450 --> 00:02:05.460 align:start position:0%
think the consensus people are starting
 

00:02:05.460 --> 00:02:06.590 align:start position:0%
think the consensus people are starting
to<00:02:05.700><c> come</c><00:02:05.880><c> in</c>

00:02:06.590 --> 00:02:06.600 align:start position:0%
to come in
 

00:02:06.600 --> 00:02:09.229 align:start position:0%
to come in
anyways<00:02:07.320><c> I've</c><00:02:07.860><c> already</c><00:02:08.099><c> started</c><00:02:08.520><c> guys</c>

00:02:09.229 --> 00:02:09.239 align:start position:0%
anyways I've already started guys
 

00:02:09.239 --> 00:02:11.570 align:start position:0%
anyways I've already started guys
uh<00:02:10.080><c> so</c><00:02:10.380><c> when</c><00:02:10.500><c> you're</c><00:02:10.619><c> scheduling</c><00:02:11.039><c> words</c><00:02:11.220><c> the</c>

00:02:11.570 --> 00:02:11.580 align:start position:0%
uh so when you're scheduling words the
 

00:02:11.580 --> 00:02:13.729 align:start position:0%
uh so when you're scheduling words the
important<00:02:11.819><c> thing</c><00:02:12.000><c> is</c><00:02:12.239><c> that</c>

00:02:13.729 --> 00:02:13.739 align:start position:0%
important thing is that
 

00:02:13.739 --> 00:02:15.890 align:start position:0%
important thing is that
you<00:02:14.400><c> don't</c><00:02:14.580><c> need</c><00:02:14.819><c> to</c><00:02:15.000><c> know</c><00:02:15.239><c> the</c><00:02:15.720><c> previous</c>

00:02:15.890 --> 00:02:15.900 align:start position:0%
you don't need to know the previous
 

00:02:15.900 --> 00:02:18.770 align:start position:0%
you don't need to know the previous
state<00:02:16.260><c> of</c><00:02:16.560><c> the</c><00:02:16.739><c> Hashi</c><00:02:17.220><c> you</c><00:02:18.060><c> only</c><00:02:18.180><c> need</c><00:02:18.480><c> to</c><00:02:18.599><c> know</c>

00:02:18.770 --> 00:02:18.780 align:start position:0%
state of the Hashi you only need to know
 

00:02:18.780 --> 00:02:20.869 align:start position:0%
state of the Hashi you only need to know
what<00:02:19.379><c> were</c><00:02:19.620><c> the</c><00:02:19.860><c> previous</c><00:02:20.040><c> scheduled</c><00:02:20.700><c> words</c>

00:02:20.869 --> 00:02:20.879 align:start position:0%
what were the previous scheduled words
 

00:02:20.879 --> 00:02:24.110 align:start position:0%
what were the previous scheduled words
in<00:02:21.780><c> particular</c><00:02:22.080><c> it</c><00:02:22.980><c> only</c><00:02:23.099><c> depends</c><00:02:23.640><c> on</c><00:02:23.940><c> the</c>

00:02:24.110 --> 00:02:24.120 align:start position:0%
in particular it only depends on the
 

00:02:24.120 --> 00:02:25.910 align:start position:0%
in particular it only depends on the
chunk<00:02:24.300><c> that</c><00:02:24.720><c> you're</c><00:02:24.840><c> hashing</c><00:02:25.260><c> now</c><00:02:25.440><c> and</c><00:02:25.739><c> it</c>

00:02:25.910 --> 00:02:25.920 align:start position:0%
chunk that you're hashing now and it
 

00:02:25.920 --> 00:02:27.350 align:start position:0%
chunk that you're hashing now and it
doesn't<00:02:26.099><c> depend</c><00:02:26.400><c> on</c><00:02:26.520><c> the</c><00:02:26.700><c> other</c><00:02:26.760><c> chunks</c><00:02:27.239><c> that</c>

00:02:27.350 --> 00:02:27.360 align:start position:0%
doesn't depend on the other chunks that
 

00:02:27.360 --> 00:02:29.030 align:start position:0%
doesn't depend on the other chunks that
you're<00:02:27.480><c> going</c><00:02:27.660><c> to</c><00:02:27.780><c> hatch</c><00:02:28.020><c> so</c><00:02:28.500><c> if</c><00:02:28.680><c> your</c><00:02:28.800><c> message</c>

00:02:29.030 --> 00:02:29.040 align:start position:0%
you're going to hatch so if your message
 

00:02:29.040 --> 00:02:32.150 align:start position:0%
you're going to hatch so if your message
consists<00:02:29.819><c> of</c><00:02:30.000><c> 10</c><00:02:30.780><c> 000</c><00:02:30.840><c> chunks</c><00:02:31.379><c> you</c><00:02:32.040><c> can</c>

00:02:32.150 --> 00:02:32.160 align:start position:0%
consists of 10 000 chunks you can
 

00:02:32.160 --> 00:02:34.490 align:start position:0%
consists of 10 000 chunks you can
compute<00:02:32.760><c> the</c><00:02:33.120><c> scheduled</c><00:02:33.540><c> words</c><00:02:33.720><c> for</c><00:02:34.020><c> the</c><00:02:34.319><c> ten</c>

00:02:34.490 --> 00:02:34.500 align:start position:0%
compute the scheduled words for the ten
 

00:02:34.500 --> 00:02:37.010 align:start position:0%
compute the scheduled words for the ten
times<00:02:34.739><c> and</c><00:02:34.920><c> challenge</c><00:02:35.160><c> without</c><00:02:36.060><c> caring</c><00:02:36.660><c> about</c>

00:02:37.010 --> 00:02:37.020 align:start position:0%
times and challenge without caring about
 

00:02:37.020 --> 00:02:39.170 align:start position:0%
times and challenge without caring about
how<00:02:37.440><c> you</c><00:02:37.560><c> attach</c><00:02:37.980><c> each</c><00:02:38.340><c> one</c><00:02:38.520><c> of</c><00:02:38.640><c> them</c><00:02:38.760><c> and</c>

00:02:39.170 --> 00:02:39.180 align:start position:0%
how you attach each one of them and
 

00:02:39.180 --> 00:02:41.270 align:start position:0%
how you attach each one of them and
without<00:02:39.300><c> caring</c><00:02:39.720><c> about</c><00:02:39.900><c> the</c><00:02:40.080><c> rounds</c><00:02:40.379><c> part</c><00:02:40.560><c> so</c>

00:02:41.270 --> 00:02:41.280 align:start position:0%
without caring about the rounds part so
 

00:02:41.280 --> 00:02:43.070 align:start position:0%
without caring about the rounds part so
scheduling<00:02:41.700><c> words</c><00:02:41.940><c> only</c><00:02:42.300><c> requires</c><00:02:42.840><c> the</c>

00:02:43.070 --> 00:02:43.080 align:start position:0%
scheduling words only requires the
 

00:02:43.080 --> 00:02:45.710 align:start position:0%
scheduling words only requires the
previously<00:02:43.800><c> scheduled</c><00:02:44.519><c> words</c><00:02:44.760><c> so</c><00:02:45.480><c> the</c>

00:02:45.710 --> 00:02:45.720 align:start position:0%
previously scheduled words so the
 

00:02:45.720 --> 00:02:47.570 align:start position:0%
previously scheduled words so the
diagram<00:02:46.140><c> there</c><00:02:46.440><c> is</c><00:02:46.680><c> taken</c><00:02:47.040><c> out</c><00:02:47.160><c> of</c><00:02:47.340><c> an</c><00:02:47.459><c> Angel</c>

00:02:47.570 --> 00:02:47.580 align:start position:0%
diagram there is taken out of an Angel
 

00:02:47.580 --> 00:02:50.509 align:start position:0%
diagram there is taken out of an Angel
paper<00:02:48.060><c> describing</c><00:02:48.900><c> what</c><00:02:49.379><c> were</c><00:02:49.620><c> two</c><00:02:50.280><c> new</c>

00:02:50.509 --> 00:02:50.519 align:start position:0%
paper describing what were two new
 

00:02:50.519 --> 00:02:53.030 align:start position:0%
paper describing what were two new
instructions<00:02:51.060><c> that</c><00:02:51.360><c> do</c><00:02:51.599><c> this</c><00:02:51.900><c> scheduling</c><00:02:52.739><c> of</c>

00:02:53.030 --> 00:02:53.040 align:start position:0%
instructions that do this scheduling of
 

00:02:53.040 --> 00:02:54.949 align:start position:0%
instructions that do this scheduling of
four<00:02:53.280><c> words</c><00:02:53.519><c> at</c><00:02:53.819><c> a</c><00:02:53.940><c> time</c><00:02:54.060><c> with</c><00:02:54.540><c> only</c><00:02:54.720><c> two</c>

00:02:54.949 --> 00:02:54.959 align:start position:0%
four words at a time with only two
 

00:02:54.959 --> 00:02:56.930 align:start position:0%
four words at a time with only two
instructions<00:02:55.440><c> this</c><00:02:55.980><c> can</c><00:02:56.160><c> be</c><00:02:56.280><c> done</c><00:02:56.519><c> now</c><00:02:56.760><c> on</c>

00:02:56.930 --> 00:02:56.940 align:start position:0%
instructions this can be done now on
 

00:02:56.940 --> 00:02:59.390 align:start position:0%
instructions this can be done now on
Modern<00:02:57.180><c> CPUs</c><00:02:57.780><c> and</c><00:02:58.379><c> this</c><00:02:58.560><c> is</c><00:02:58.620><c> just</c><00:02:58.800><c> a</c><00:02:58.980><c> sketch</c>

00:02:59.390 --> 00:02:59.400 align:start position:0%
Modern CPUs and this is just a sketch
 

00:02:59.400 --> 00:03:01.790 align:start position:0%
Modern CPUs and this is just a sketch
that<00:02:59.819><c> how</c><00:03:00.239><c> diagram</c><00:03:00.660><c> diagrammatically</c><00:03:01.620><c> you</c>

00:03:01.790 --> 00:03:01.800 align:start position:0%
that how diagram diagrammatically you
 

00:03:01.800 --> 00:03:04.369 align:start position:0%
that how diagram diagrammatically you
compute<00:03:02.340><c> four</c><00:03:02.819><c> words</c><00:03:03.000><c> at</c><00:03:03.300><c> a</c><00:03:03.480><c> time</c><00:03:03.599><c> but</c><00:03:04.200><c> it's</c>

00:03:04.369 --> 00:03:04.379 align:start position:0%
compute four words at a time but it's
 

00:03:04.379 --> 00:03:06.170 align:start position:0%
compute four words at a time but it's
irrelevant<00:03:04.980><c> the</c><00:03:05.220><c> method</c><00:03:05.519><c> that</c><00:03:05.760><c> you</c><00:03:05.819><c> use</c><00:03:06.000><c> to</c>

00:03:06.170 --> 00:03:06.180 align:start position:0%
irrelevant the method that you use to
 

00:03:06.180 --> 00:03:07.910 align:start position:0%
irrelevant the method that you use to
compute<00:03:06.480><c> those</c><00:03:06.599><c> scheduled</c><00:03:07.019><c> words</c><00:03:07.200><c> what</c><00:03:07.800><c> I</c>

00:03:07.910 --> 00:03:07.920 align:start position:0%
compute those scheduled words what I
 

00:03:07.920 --> 00:03:10.009 align:start position:0%
compute those scheduled words what I
want<00:03:08.040><c> you</c><00:03:08.160><c> to</c><00:03:08.280><c> remember</c><00:03:08.400><c> is</c><00:03:08.819><c> that</c><00:03:09.120><c> to</c><00:03:09.660><c> compute</c>

00:03:10.009 --> 00:03:10.019 align:start position:0%
want you to remember is that to compute
 

00:03:10.019 --> 00:03:11.690 align:start position:0%
want you to remember is that to compute
them<00:03:10.200><c> you</c><00:03:10.500><c> need</c><00:03:10.620><c> to</c><00:03:10.739><c> know</c><00:03:10.920><c> the</c><00:03:11.280><c> previous</c><00:03:11.400><c> words</c>

00:03:11.690 --> 00:03:11.700 align:start position:0%
them you need to know the previous words
 

00:03:11.700 --> 00:03:14.390 align:start position:0%
them you need to know the previous words
and<00:03:11.879><c> nothing</c><00:03:12.120><c> else</c><00:03:12.360><c> rounds</c><00:03:13.680><c> we</c><00:03:14.159><c> don't</c><00:03:14.280><c> care</c>

00:03:14.390 --> 00:03:14.400 align:start position:0%
and nothing else rounds we don't care
 

00:03:14.400 --> 00:03:16.490 align:start position:0%
and nothing else rounds we don't care
about<00:03:14.580><c> what</c><00:03:14.879><c> rounds</c><00:03:15.300><c> is</c><00:03:15.480><c> we</c><00:03:15.900><c> only</c><00:03:16.080><c> care</c><00:03:16.319><c> that</c>

00:03:16.490 --> 00:03:16.500 align:start position:0%
about what rounds is we only care that
 

00:03:16.500 --> 00:03:18.290 align:start position:0%
about what rounds is we only care that
it's<00:03:16.739><c> a</c><00:03:16.920><c> function</c><00:03:17.159><c> that</c><00:03:17.580><c> is</c><00:03:17.700><c> not</c><00:03:17.819><c> invertible</c>

00:03:18.290 --> 00:03:18.300 align:start position:0%
it's a function that is not invertible
 

00:03:18.300 --> 00:03:20.030 align:start position:0%
it's a function that is not invertible
that<00:03:18.720><c> is</c><00:03:18.840><c> hard</c><00:03:19.019><c> that</c><00:03:19.440><c> is</c><00:03:19.620><c> computationally</c>

00:03:20.030 --> 00:03:20.040 align:start position:0%
that is hard that is computationally
 

00:03:20.040 --> 00:03:23.030 align:start position:0%
that is hard that is computationally
hard<00:03:20.400><c> to</c><00:03:20.580><c> invert</c><00:03:20.940><c> but</c><00:03:21.620><c> the</c><00:03:22.620><c> important</c><00:03:22.920><c> thing</c>

00:03:23.030 --> 00:03:23.040 align:start position:0%
hard to invert but the important thing
 

00:03:23.040 --> 00:03:25.550 align:start position:0%
hard to invert but the important thing
that<00:03:23.220><c> we</c><00:03:23.340><c> need</c><00:03:23.459><c> to</c><00:03:23.580><c> remember</c><00:03:23.760><c> is</c><00:03:24.120><c> this</c><00:03:24.560><c> we</c>

00:03:25.550 --> 00:03:25.560 align:start position:0%
that we need to remember is this we
 

00:03:25.560 --> 00:03:27.710 align:start position:0%
that we need to remember is this we
already<00:03:26.099><c> we</c><00:03:26.519><c> were</c><00:03:26.819><c> given</c><00:03:27.120><c> the</c><00:03:27.239><c> message</c><00:03:27.360><c> we</c>

00:03:27.710 --> 00:03:27.720 align:start position:0%
already we were given the message we
 

00:03:27.720 --> 00:03:29.690 align:start position:0%
already we were given the message we
broke<00:03:27.959><c> it</c><00:03:28.080><c> into</c><00:03:28.200><c> pieces</c><00:03:28.500><c> of</c><00:03:28.680><c> 64</c><00:03:29.040><c> bytes</c><00:03:29.459><c> that</c><00:03:29.580><c> I</c>

00:03:29.690 --> 00:03:29.700 align:start position:0%
broke it into pieces of 64 bytes that I
 

00:03:29.700 --> 00:03:32.030 align:start position:0%
broke it into pieces of 64 bytes that I
haven't<00:03:29.760><c> told</c><00:03:29.940><c> you</c><00:03:30.060><c> how</c><00:03:30.239><c> we</c><00:03:30.959><c> computed</c><00:03:31.500><c> those</c>

00:03:32.030 --> 00:03:32.040 align:start position:0%
haven't told you how we computed those
 

00:03:32.040 --> 00:03:34.190 align:start position:0%
haven't told you how we computed those
scheduled<00:03:32.519><c> words</c><00:03:32.640><c> that</c><00:03:33.060><c> we</c><00:03:33.239><c> need</c><00:03:33.360><c> and</c><00:03:34.080><c> then</c>

00:03:34.190 --> 00:03:34.200 align:start position:0%
scheduled words that we need and then
 

00:03:34.200 --> 00:03:36.649 align:start position:0%
scheduled words that we need and then
what<00:03:34.440><c> we</c><00:03:34.620><c> do</c><00:03:34.800><c> is</c><00:03:34.920><c> we</c><00:03:35.159><c> pass</c>

00:03:36.649 --> 00:03:36.659 align:start position:0%
what we do is we pass
 

00:03:36.659 --> 00:03:38.630 align:start position:0%
what we do is we pass
an<00:03:37.140><c> incoming</c><00:03:37.620><c> Digest</c>

00:03:38.630 --> 00:03:38.640 align:start position:0%
an incoming Digest
 

00:03:38.640 --> 00:03:40.490 align:start position:0%
an incoming Digest
if<00:03:39.180><c> it's</c><00:03:39.300><c> the</c><00:03:39.540><c> very</c><00:03:39.720><c> first</c><00:03:39.840><c> chunk</c><00:03:40.080><c> that</c><00:03:40.379><c> you're</c>

00:03:40.490 --> 00:03:40.500 align:start position:0%
if it's the very first chunk that you're
 

00:03:40.500 --> 00:03:42.649 align:start position:0%
if it's the very first chunk that you're
slash<00:03:40.920><c> that</c><00:03:41.159><c> you're</c><00:03:41.280><c> hashing</c><00:03:41.760><c> we</c><00:03:42.239><c> pass</c><00:03:42.480><c> a</c>

00:03:42.649 --> 00:03:42.659 align:start position:0%
slash that you're hashing we pass a
 

00:03:42.659 --> 00:03:45.229 align:start position:0%
slash that you're hashing we pass a
constant<00:03:42.959><c> digest</c><00:03:43.379><c> that</c><00:03:43.560><c> the</c><00:03:43.739><c> method</c><00:03:43.980><c> has</c><00:03:44.239><c> if</c>

00:03:45.229 --> 00:03:45.239 align:start position:0%
constant digest that the method has if
 

00:03:45.239 --> 00:03:47.089 align:start position:0%
constant digest that the method has if
it's<00:03:45.480><c> the</c><00:03:45.780><c> third</c><00:03:45.900><c> chunk</c><00:03:46.260><c> you're</c><00:03:46.560><c> gonna</c><00:03:46.739><c> pass</c>

00:03:47.089 --> 00:03:47.099 align:start position:0%
it's the third chunk you're gonna pass
 

00:03:47.099 --> 00:03:50.750 align:start position:0%
it's the third chunk you're gonna pass
the<00:03:48.180><c> past</c><00:03:48.959><c> that</c><00:03:49.379><c> the</c><00:03:49.560><c> second</c><00:03:49.799><c> chunk</c><00:03:50.159><c> produced</c>

00:03:50.750 --> 00:03:50.760 align:start position:0%
the past that the second chunk produced
 

00:03:50.760 --> 00:03:52.610 align:start position:0%
the past that the second chunk produced
the<00:03:51.420><c> point</c><00:03:51.540><c> is</c><00:03:51.720><c> that</c><00:03:51.900><c> you</c><00:03:52.080><c> have</c><00:03:52.260><c> a</c><00:03:52.440><c> status</c>

00:03:52.610 --> 00:03:52.620 align:start position:0%
the point is that you have a status
 

00:03:52.620 --> 00:03:55.490 align:start position:0%
the point is that you have a status
which<00:03:53.099><c> is</c><00:03:53.220><c> your</c><00:03:53.400><c> current</c><00:03:53.580><c> hash</c><00:03:53.959><c> and</c><00:03:54.959><c> you</c><00:03:55.379><c> pass</c>

00:03:55.490 --> 00:03:55.500 align:start position:0%
which is your current hash and you pass
 

00:03:55.500 --> 00:03:57.410 align:start position:0%
which is your current hash and you pass
it<00:03:55.680><c> through</c><00:03:55.860><c> this</c><00:03:56.040><c> function</c><00:03:56.340><c> that</c><00:03:56.640><c> takes</c><00:03:56.879><c> this</c>

00:03:57.410 --> 00:03:57.420 align:start position:0%
it through this function that takes this
 

00:03:57.420 --> 00:04:00.229 align:start position:0%
it through this function that takes this
status<00:03:57.599><c> the</c><00:03:58.200><c> hash</c><00:03:58.379><c> the</c><00:03:58.799><c> 32</c><00:03:59.099><c> bytes</c><00:03:59.459><c> it</c><00:04:00.060><c> takes</c>

00:04:00.229 --> 00:04:00.239 align:start position:0%
status the hash the 32 bytes it takes
 

00:04:00.239 --> 00:04:02.390 align:start position:0%
status the hash the 32 bytes it takes
one<00:04:00.840><c> of</c><00:04:01.019><c> the</c><00:04:01.140><c> scheduled</c><00:04:01.620><c> words</c><00:04:01.799><c> that</c><00:04:02.280><c> you</c>

00:04:02.390 --> 00:04:02.400 align:start position:0%
one of the scheduled words that you
 

00:04:02.400 --> 00:04:05.149 align:start position:0%
one of the scheduled words that you
computed<00:04:02.819><c> and</c><00:04:03.599><c> it</c><00:04:03.780><c> takes</c><00:04:04.080><c> another</c><00:04:04.560><c> constant</c>

00:04:05.149 --> 00:04:05.159 align:start position:0%
computed and it takes another constant
 

00:04:05.159 --> 00:04:07.369 align:start position:0%
computed and it takes another constant
word<00:04:05.400><c> that</c><00:04:05.760><c> the</c><00:04:06.000><c> protocol</c><00:04:06.360><c> has</c>

00:04:07.369 --> 00:04:07.379 align:start position:0%
word that the protocol has
 

00:04:07.379 --> 00:04:09.110 align:start position:0%
word that the protocol has
so<00:04:07.739><c> it</c><00:04:07.799><c> takes</c><00:04:07.920><c> this</c><00:04:08.159><c> data</c><00:04:08.519><c> and</c><00:04:08.700><c> it</c><00:04:08.760><c> produces</c>

00:04:09.110 --> 00:04:09.120 align:start position:0%
so it takes this data and it produces
 

00:04:09.120 --> 00:04:11.509 align:start position:0%
so it takes this data and it produces
for<00:04:09.299><c> you</c><00:04:09.420><c> a</c><00:04:09.540><c> new</c><00:04:09.720><c> hash</c><00:04:10.019><c> so</c><00:04:10.920><c> what</c><00:04:11.159><c> do</c><00:04:11.340><c> you</c><00:04:11.459><c> need</c>

00:04:11.509 --> 00:04:11.519 align:start position:0%
for you a new hash so what do you need
 

00:04:11.519 --> 00:04:13.250 align:start position:0%
for you a new hash so what do you need
to<00:04:11.640><c> remember</c><00:04:11.760><c> from</c><00:04:12.120><c> this</c><00:04:12.299><c> is</c><00:04:12.599><c> that</c><00:04:12.780><c> you</c><00:04:13.140><c> need</c>

00:04:13.250 --> 00:04:13.260 align:start position:0%
to remember from this is that you need
 

00:04:13.260 --> 00:04:15.350 align:start position:0%
to remember from this is that you need
to<00:04:13.379><c> have</c><00:04:13.560><c> computed</c><00:04:14.159><c> at</c><00:04:14.400><c> least</c><00:04:14.580><c> that</c><00:04:14.939><c> scheduled</c>

00:04:15.350 --> 00:04:15.360 align:start position:0%
to have computed at least that scheduled
 

00:04:15.360 --> 00:04:16.310 align:start position:0%
to have computed at least that scheduled
word

00:04:16.310 --> 00:04:16.320 align:start position:0%
word
 

00:04:16.320 --> 00:04:18.949 align:start position:0%
word
before<00:04:16.919><c> passing</c><00:04:17.400><c> through</c><00:04:17.519><c> the</c><00:04:17.699><c> rounds</c><00:04:18.060><c> and</c>

00:04:18.949 --> 00:04:18.959 align:start position:0%
before passing through the rounds and
 

00:04:18.959 --> 00:04:21.830 align:start position:0%
before passing through the rounds and
you<00:04:19.380><c> cannot</c><00:04:19.680><c> do</c><00:04:19.919><c> this</c><00:04:20.100><c> in</c><00:04:20.280><c> parallel</c><00:04:20.639><c> to</c><00:04:21.419><c> pass</c>

00:04:21.830 --> 00:04:21.840 align:start position:0%
you cannot do this in parallel to pass
 

00:04:21.840 --> 00:04:23.330 align:start position:0%
you cannot do this in parallel to pass
through<00:04:22.139><c> the</c><00:04:22.320><c> round</c><00:04:22.500><c> you</c><00:04:22.979><c> need</c><00:04:23.100><c> to</c><00:04:23.160><c> have</c>

00:04:23.330 --> 00:04:23.340 align:start position:0%
through the round you need to have
 

00:04:23.340 --> 00:04:25.310 align:start position:0%
through the round you need to have
computer<00:04:23.520><c> already</c><00:04:23.940><c> in</c><00:04:24.180><c> hash</c><00:04:24.419><c> before</c><00:04:24.660><c> so</c><00:04:25.199><c> this</c>

00:04:25.310 --> 00:04:25.320 align:start position:0%
computer already in hash before so this
 

00:04:25.320 --> 00:04:26.510 align:start position:0%
computer already in hash before so this
is<00:04:25.440><c> something</c><00:04:25.560><c> that</c><00:04:25.800><c> you</c><00:04:25.919><c> cannot</c><00:04:26.160><c> do</c><00:04:26.340><c> in</c>

00:04:26.510 --> 00:04:26.520 align:start position:0%
is something that you cannot do in
 

00:04:26.520 --> 00:04:27.469 align:start position:0%
is something that you cannot do in
paragraph

00:04:27.469 --> 00:04:27.479 align:start position:0%
paragraph
 

00:04:27.479 --> 00:04:30.469 align:start position:0%
paragraph
okay<00:04:28.020><c> so</c><00:04:28.500><c> the</c><00:04:28.620><c> padding</c><00:04:28.979><c> block</c><00:04:29.160><c> so</c><00:04:29.699><c> this</c><00:04:29.940><c> is</c><00:04:30.060><c> the</c>

00:04:30.469 --> 00:04:30.479 align:start position:0%
okay so the padding block so this is the
 

00:04:30.479 --> 00:04:33.770 align:start position:0%
okay so the padding block so this is the
first<00:04:31.020><c> part</c><00:04:31.259><c> of</c><00:04:31.440><c> the</c><00:04:31.500><c> three</c><00:04:31.919><c> uh</c><00:04:32.820><c> process</c><00:04:33.419><c> which</c>

00:04:33.770 --> 00:04:33.780 align:start position:0%
first part of the three uh process which
 

00:04:33.780 --> 00:04:35.870 align:start position:0%
first part of the three uh process which
is<00:04:33.960><c> breaking</c><00:04:34.680><c> the</c><00:04:34.860><c> message</c><00:04:35.040><c> into</c><00:04:35.460><c> multiples</c>

00:04:35.870 --> 00:04:35.880 align:start position:0%
is breaking the message into multiples
 

00:04:35.880 --> 00:04:38.450 align:start position:0%
is breaking the message into multiples
of<00:04:35.940><c> 64</c><00:04:36.360><c> bytes</c><00:04:36.840><c> how</c><00:04:37.259><c> do</c><00:04:37.380><c> you</c><00:04:37.440><c> do</c><00:04:37.620><c> this</c><00:04:37.800><c> well</c><00:04:38.220><c> you</c>

00:04:38.450 --> 00:04:38.460 align:start position:0%
of 64 bytes how do you do this well you
 

00:04:38.460 --> 00:04:39.170 align:start position:0%
of 64 bytes how do you do this well you
just

00:04:39.170 --> 00:04:39.180 align:start position:0%
just
 

00:04:39.180 --> 00:04:41.689 align:start position:0%
just
break<00:04:39.780><c> your</c><00:04:40.320><c> message</c><00:04:40.440><c> into</c><00:04:40.740><c> multiple</c><00:04:41.160><c> of</c><00:04:41.340><c> 64</c>

00:04:41.689 --> 00:04:41.699 align:start position:0%
break your message into multiple of 64
 

00:04:41.699 --> 00:04:44.810 align:start position:0%
break your message into multiple of 64
bytes<00:04:42.120><c> you</c><00:04:43.020><c> add</c><00:04:43.380><c> one</c><00:04:44.040><c> bit</c>

00:04:44.810 --> 00:04:44.820 align:start position:0%
bytes you add one bit
 

00:04:44.820 --> 00:04:46.610 align:start position:0%
bytes you add one bit
at<00:04:45.240><c> the</c><00:04:45.360><c> very</c><00:04:45.419><c> end</c><00:04:45.660><c> of</c><00:04:45.780><c> the</c><00:04:45.900><c> message</c><00:04:46.020><c> just</c><00:04:46.320><c> to</c>

00:04:46.610 --> 00:04:46.620 align:start position:0%
at the very end of the message just to
 

00:04:46.620 --> 00:04:49.490 align:start position:0%
at the very end of the message just to
Signal<00:04:46.979><c> this</c><00:04:47.759><c> message</c><00:04:48.000><c> has</c><00:04:48.419><c> ended</c><00:04:48.840><c> so</c><00:04:49.320><c> here</c>

00:04:49.490 --> 00:04:49.500 align:start position:0%
Signal this message has ended so here
 

00:04:49.500 --> 00:04:52.730 align:start position:0%
Signal this message has ended so here
the<00:04:49.800><c> message</c><00:04:49.979><c> is</c><00:04:50.280><c> less</c><00:04:50.520><c> than</c><00:04:50.699><c> 64</c><00:04:51.180><c> bytes</c><00:04:51.600><c> is</c><00:04:52.139><c> 24</c>

00:04:52.730 --> 00:04:52.740 align:start position:0%
the message is less than 64 bytes is 24
 

00:04:52.740 --> 00:04:55.550 align:start position:0%
the message is less than 64 bytes is 24
bits<00:04:53.340><c> these</c><00:04:54.060><c> three</c><00:04:54.180><c> bytes</c><00:04:54.600><c> there</c><00:04:54.780><c> a</c><00:04:55.020><c> b</c><00:04:55.199><c> and</c><00:04:55.320><c> c</c>

00:04:55.550 --> 00:04:55.560 align:start position:0%
bits these three bytes there a b and c
 

00:04:55.560 --> 00:04:59.450 align:start position:0%
bits these three bytes there a b and c
this<00:04:56.400><c> one</c><00:04:56.639><c> there</c><00:04:57.000><c> is</c><00:04:57.660><c> showing</c><00:04:58.020><c> that</c><00:04:58.320><c> we</c><00:04:58.979><c> added</c>

00:04:59.450 --> 00:04:59.460 align:start position:0%
this one there is showing that we added
 

00:04:59.460 --> 00:05:01.189 align:start position:0%
this one there is showing that we added
that<00:04:59.759><c> extra</c><00:05:00.000><c> bit</c><00:05:00.300><c> to</c><00:05:00.479><c> show</c><00:05:00.600><c> the</c><00:05:00.720><c> message</c><00:05:00.900><c> has</c>

00:05:01.189 --> 00:05:01.199 align:start position:0%
that extra bit to show the message has
 

00:05:01.199 --> 00:05:04.969 align:start position:0%
that extra bit to show the message has
finished<00:05:01.440><c> and</c><00:05:02.400><c> then</c><00:05:02.520><c> you</c><00:05:02.759><c> pad</c><00:05:03.000><c> with</c><00:05:03.300><c> zero</c><00:05:03.720><c> bits</c>

00:05:04.969 --> 00:05:04.979 align:start position:0%
finished and then you pad with zero bits
 

00:05:04.979 --> 00:05:08.930 align:start position:0%
finished and then you pad with zero bits
up<00:05:05.759><c> to</c><00:05:06.000><c> a</c><00:05:06.240><c> multiple</c><00:05:06.600><c> of</c><00:05:06.720><c> 64</c><00:05:07.199><c> bytes</c><00:05:07.620><c> minus</c><00:05:08.040><c> eight</c>

00:05:08.930 --> 00:05:08.940 align:start position:0%
up to a multiple of 64 bytes minus eight
 

00:05:08.940 --> 00:05:10.310 align:start position:0%
up to a multiple of 64 bytes minus eight
because<00:05:09.300><c> you're</c><00:05:09.540><c> going</c><00:05:09.720><c> to</c><00:05:09.780><c> use</c><00:05:09.900><c> the</c><00:05:10.199><c> last</c>

00:05:10.310 --> 00:05:10.320 align:start position:0%
because you're going to use the last
 

00:05:10.320 --> 00:05:13.430 align:start position:0%
because you're going to use the last
eight<00:05:10.620><c> bytes</c><00:05:11.040><c> or</c><00:05:11.340><c> 64</c><00:05:11.759><c> bits</c><00:05:12.180><c> to</c><00:05:12.660><c> encode</c><00:05:13.080><c> the</c>

00:05:13.430 --> 00:05:13.440 align:start position:0%
eight bytes or 64 bits to encode the
 

00:05:13.440 --> 00:05:15.590 align:start position:0%
eight bytes or 64 bits to encode the
length<00:05:13.680><c> of</c><00:05:13.860><c> the</c><00:05:14.100><c> whole</c><00:05:14.220><c> message</c>

00:05:15.590 --> 00:05:15.600 align:start position:0%
length of the whole message
 

00:05:15.600 --> 00:05:17.749 align:start position:0%
length of the whole message
as<00:05:16.080><c> is</c><00:05:16.259><c> there</c><00:05:16.380><c> in</c><00:05:16.680><c> binary</c><00:05:16.979><c> that's</c><00:05:17.280><c> the</c><00:05:17.580><c> number</c>

00:05:17.749 --> 00:05:17.759 align:start position:0%
as is there in binary that's the number
 

00:05:17.759 --> 00:05:19.550 align:start position:0%
as is there in binary that's the number
24<00:05:18.000><c> which</c><00:05:18.419><c> is</c><00:05:18.600><c> the</c><00:05:18.720><c> actual</c><00:05:18.960><c> length</c><00:05:19.259><c> of</c><00:05:19.380><c> this</c>

00:05:19.550 --> 00:05:19.560 align:start position:0%
24 which is the actual length of this
 

00:05:19.560 --> 00:05:20.330 align:start position:0%
24 which is the actual length of this
message

00:05:20.330 --> 00:05:20.340 align:start position:0%
message
 

00:05:20.340 --> 00:05:23.150 align:start position:0%
message
okay<00:05:20.520><c> so</c><00:05:21.000><c> this</c><00:05:21.120><c> is</c><00:05:21.240><c> the</c><00:05:21.360><c> procedure</c><00:05:21.720><c> to</c><00:05:21.840><c> pad</c><00:05:22.160><c> uh</c>

00:05:23.150 --> 00:05:23.160 align:start position:0%
okay so this is the procedure to pad uh
 

00:05:23.160 --> 00:05:25.430 align:start position:0%
okay so this is the procedure to pad uh
your<00:05:23.580><c> message</c><00:05:24.060><c> which</c><00:05:24.419><c> was</c><00:05:24.600><c> arbitrary</c><00:05:25.080><c> length</c>

00:05:25.430 --> 00:05:25.440 align:start position:0%
your message which was arbitrary length
 

00:05:25.440 --> 00:05:28.249 align:start position:0%
your message which was arbitrary length
into<00:05:25.979><c> a</c><00:05:26.340><c> multiple</c><00:05:26.699><c> of</c><00:05:26.820><c> 64</c><00:05:27.180><c> bytes</c>

00:05:28.249 --> 00:05:28.259 align:start position:0%
into a multiple of 64 bytes
 

00:05:28.259 --> 00:05:30.650 align:start position:0%
into a multiple of 64 bytes
vectorization<00:05:28.979><c> which</c><00:05:29.340><c> is</c><00:05:29.460><c> the</c><00:05:29.639><c> main</c><00:05:30.000><c> topic</c><00:05:30.360><c> of</c>

00:05:30.650 --> 00:05:30.660 align:start position:0%
vectorization which is the main topic of
 

00:05:30.660 --> 00:05:32.570 align:start position:0%
vectorization which is the main topic of
this<00:05:30.780><c> talk</c><00:05:31.020><c> is</c><00:05:31.259><c> vectorization</c>

00:05:32.570 --> 00:05:32.580 align:start position:0%
this talk is vectorization
 

00:05:32.580 --> 00:05:34.430 align:start position:0%
this talk is vectorization
so<00:05:32.940><c> the</c><00:05:33.180><c> first</c><00:05:33.300><c> thing</c><00:05:33.419><c> to</c><00:05:33.600><c> notice</c><00:05:33.900><c> is</c><00:05:34.080><c> that</c>

00:05:34.430 --> 00:05:34.440 align:start position:0%
so the first thing to notice is that
 

00:05:34.440 --> 00:05:36.710 align:start position:0%
so the first thing to notice is that
you're<00:05:35.039><c> not</c><00:05:35.280><c> going</c><00:05:35.580><c> to</c><00:05:35.759><c> beat</c><00:05:36.060><c> any</c><00:05:36.479><c> of</c><00:05:36.660><c> the</c>

00:05:36.710 --> 00:05:36.720 align:start position:0%
you're not going to beat any of the
 

00:05:36.720 --> 00:05:39.230 align:start position:0%
you're not going to beat any of the
hazards<00:05:37.259><c> out</c><00:05:37.380><c> there</c><00:05:37.560><c> every</c><00:05:38.520><c> implementation</c>

00:05:39.230 --> 00:05:39.240 align:start position:0%
hazards out there every implementation
 

00:05:39.240 --> 00:05:40.850 align:start position:0%
hazards out there every implementation
that<00:05:39.539><c> I've</c><00:05:39.660><c> reviewed</c><00:05:40.020><c> before</c><00:05:40.259><c> according</c><00:05:40.560><c> to</c>

00:05:40.850 --> 00:05:40.860 align:start position:0%
that I've reviewed before according to
 

00:05:40.860 --> 00:05:42.830 align:start position:0%
that I've reviewed before according to
this<00:05:41.039><c> and</c><00:05:41.639><c> I'm</c><00:05:41.820><c> not</c><00:05:41.940><c> an</c><00:05:42.060><c> expert</c><00:05:42.419><c> at</c><00:05:42.539><c> role</c><00:05:42.720><c> on</c>

00:05:42.830 --> 00:05:42.840 align:start position:0%
this and I'm not an expert at role on
 

00:05:42.840 --> 00:05:44.570 align:start position:0%
this and I'm not an expert at role on
this<00:05:42.960><c> I</c><00:05:43.199><c> I</c><00:05:43.440><c> come</c><00:05:43.919><c> from</c><00:05:44.039><c> a</c><00:05:44.220><c> completely</c>

00:05:44.570 --> 00:05:44.580 align:start position:0%
this I I come from a completely
 

00:05:44.580 --> 00:05:45.770 align:start position:0%
this I I come from a completely
different<00:05:44.699><c> subjects</c><00:05:45.300><c> but</c><00:05:45.600><c> every</c>

00:05:45.770 --> 00:05:45.780 align:start position:0%
different subjects but every
 

00:05:45.780 --> 00:05:47.450 align:start position:0%
different subjects but every
implementation<00:05:46.259><c> I've</c><00:05:46.500><c> seen</c><00:05:46.680><c> is</c><00:05:46.979><c> equivalent</c>

00:05:47.450 --> 00:05:47.460 align:start position:0%
implementation I've seen is equivalent
 

00:05:47.460 --> 00:05:50.390 align:start position:0%
implementation I've seen is equivalent
to<00:05:48.000><c> Intel's</c><00:05:48.660><c> original</c><00:05:48.840><c> paper</c><00:05:49.560><c> white</c><00:05:49.919><c> paper</c><00:05:50.160><c> on</c>

00:05:50.390 --> 00:05:50.400 align:start position:0%
to Intel's original paper white paper on
 

00:05:50.400 --> 00:05:52.790 align:start position:0%
to Intel's original paper white paper on
this<00:05:50.940><c> and</c><00:05:51.600><c> it's</c><00:05:51.780><c> equivalent</c><00:05:52.080><c> to</c><00:05:52.199><c> what</c><00:05:52.380><c> opens</c>

00:05:52.790 --> 00:05:52.800 align:start position:0%
this and it's equivalent to what opens
 

00:05:52.800 --> 00:05:55.370 align:start position:0%
this and it's equivalent to what opens
the<00:05:52.919><c> cell</c><00:05:53.100><c> for</c><00:05:53.280><c> example</c><00:05:53.460><c> does</c><00:05:54.180><c> all</c><00:05:55.080><c> of</c><00:05:55.259><c> them</c>

00:05:55.370 --> 00:05:55.380 align:start position:0%
the cell for example does all of them
 

00:05:55.380 --> 00:05:57.890 align:start position:0%
the cell for example does all of them
implement<00:05:55.860><c> the</c><00:05:56.100><c> following</c><00:05:56.460><c> you</c><00:05:57.240><c> can</c><00:05:57.360><c> compute</c>

00:05:57.890 --> 00:05:57.900 align:start position:0%
implement the following you can compute
 

00:05:57.900 --> 00:05:59.629 align:start position:0%
implement the following you can compute
your<00:05:58.380><c> scheduled</c><00:05:58.740><c> words</c><00:05:58.919><c> as</c><00:05:59.160><c> I</c><00:05:59.340><c> told</c><00:05:59.520><c> you</c>

00:05:59.629 --> 00:05:59.639 align:start position:0%
your scheduled words as I told you
 

00:05:59.639 --> 00:06:01.610 align:start position:0%
your scheduled words as I told you
without<00:06:00.419><c> knowing</c><00:06:00.840><c> what</c><00:06:00.960><c> the</c><00:06:01.139><c> previously</c>

00:06:01.610 --> 00:06:01.620 align:start position:0%
without knowing what the previously
 

00:06:01.620 --> 00:06:04.490 align:start position:0%
without knowing what the previously
hashed<00:06:02.460><c> uh</c><00:06:03.419><c> what</c><00:06:03.720><c> the</c><00:06:03.900><c> previous</c><00:06:04.020><c> what</c><00:06:04.380><c> the</c>

00:06:04.490 --> 00:06:04.500 align:start position:0%
hashed uh what the previous what the
 

00:06:04.500 --> 00:06:06.469 align:start position:0%
hashed uh what the previous what the
current<00:06:04.740><c> status</c><00:06:05.039><c> of</c><00:06:05.280><c> the</c><00:06:05.400><c> hashing</c><00:06:05.759><c> is</c>

00:06:06.469 --> 00:06:06.479 align:start position:0%
current status of the hashing is
 

00:06:06.479 --> 00:06:08.810 align:start position:0%
current status of the hashing is
so<00:06:06.900><c> all</c><00:06:07.080><c> of</c><00:06:07.259><c> them</c><00:06:07.440><c> use</c><00:06:07.860><c> Vector</c><00:06:08.340><c> instructions</c>

00:06:08.810 --> 00:06:08.820 align:start position:0%
so all of them use Vector instructions
 

00:06:08.820 --> 00:06:12.050 align:start position:0%
so all of them use Vector instructions
to<00:06:09.780><c> compute</c><00:06:10.139><c> several</c><00:06:10.560><c> words</c><00:06:10.800><c> at</c><00:06:11.039><c> a</c><00:06:11.160><c> time</c><00:06:11.280><c> if</c>

00:06:12.050 --> 00:06:12.060 align:start position:0%
to compute several words at a time if
 

00:06:12.060 --> 00:06:16.850 align:start position:0%
to compute several words at a time if
your<00:06:12.180><c> CPU</c><00:06:12.600><c> supports</c><00:06:13.340><c> uh</c><00:06:14.600><c> 128</c><00:06:15.600><c> bits</c><00:06:16.139><c> registers</c>

00:06:16.850 --> 00:06:16.860 align:start position:0%
your CPU supports uh 128 bits registers
 

00:06:16.860 --> 00:06:19.430 align:start position:0%
your CPU supports uh 128 bits registers
like<00:06:17.100><c> these</c><00:06:17.340><c> ones</c><00:06:17.639><c> and</c><00:06:18.180><c> almost</c><00:06:18.360><c> every</c><00:06:18.720><c> CPU</c><00:06:19.199><c> now</c>

00:06:19.430 --> 00:06:19.440 align:start position:0%
like these ones and almost every CPU now
 

00:06:19.440 --> 00:06:22.010 align:start position:0%
like these ones and almost every CPU now
does<00:06:20.160><c> then</c><00:06:20.639><c> you're</c><00:06:20.820><c> gonna</c><00:06:21.000><c> compute</c><00:06:21.660><c> four</c>

00:06:22.010 --> 00:06:22.020 align:start position:0%
does then you're gonna compute four
 

00:06:22.020 --> 00:06:23.749 align:start position:0%
does then you're gonna compute four
words<00:06:22.259><c> at</c><00:06:22.500><c> a</c><00:06:22.620><c> time</c><00:06:22.740><c> four</c><00:06:22.919><c> double</c><00:06:23.160><c> words</c><00:06:23.400><c> at</c><00:06:23.639><c> a</c>

00:06:23.749 --> 00:06:23.759 align:start position:0%
words at a time four double words at a
 

00:06:23.759 --> 00:06:26.390 align:start position:0%
words at a time four double words at a
time<00:06:24.300><c> you</c><00:06:24.900><c> start</c><00:06:25.080><c> with</c><00:06:25.319><c> your</c><00:06:25.560><c> 16</c><00:06:25.800><c> double</c><00:06:26.160><c> Words</c>

00:06:26.390 --> 00:06:26.400 align:start position:0%
time you start with your 16 double Words
 

00:06:26.400 --> 00:06:28.790 align:start position:0%
time you start with your 16 double Words
which<00:06:26.699><c> is</c><00:06:26.819><c> your</c><00:06:27.060><c> message</c><00:06:27.240><c> and</c><00:06:27.840><c> you</c><00:06:28.080><c> can</c><00:06:28.199><c> put</c>

00:06:28.790 --> 00:06:28.800 align:start position:0%
which is your message and you can put
 

00:06:28.800 --> 00:06:31.129 align:start position:0%
which is your message and you can put
those<00:06:29.280><c> 16</c><00:06:29.639><c> double</c><00:06:30.000><c> words</c><00:06:30.240><c> in</c><00:06:30.660><c> only</c><00:06:30.900><c> four</c>

00:06:31.129 --> 00:06:31.139 align:start position:0%
those 16 double words in only four
 

00:06:31.139 --> 00:06:34.670 align:start position:0%
those 16 double words in only four
registers<00:06:31.680><c> if</c><00:06:32.340><c> your</c><00:06:32.520><c> computer</c><00:06:32.699><c> supports</c><00:06:33.780><c> uh</c>

00:06:34.670 --> 00:06:34.680 align:start position:0%
registers if your computer supports uh
 

00:06:34.680 --> 00:06:36.230 align:start position:0%
registers if your computer supports uh
avx2

00:06:36.230 --> 00:06:36.240 align:start position:0%
avx2
 

00:06:36.240 --> 00:06:38.330 align:start position:0%
avx2
that<00:06:36.900><c> you</c><00:06:37.380><c> can</c><00:06:37.560><c> do</c><00:06:37.680><c> our</c><00:06:37.860><c> genetic</c><00:06:38.160><c> and</c>

00:06:38.330 --> 00:06:38.340 align:start position:0%
that you can do our genetic and
 

00:06:38.340 --> 00:06:40.670 align:start position:0%
that you can do our genetic and
registers<00:06:38.699><c> that</c><00:06:38.880><c> are</c><00:06:39.060><c> 256</c><00:06:39.780><c> bits</c><00:06:40.259><c> then</c><00:06:40.560><c> you're</c>

00:06:40.670 --> 00:06:40.680 align:start position:0%
registers that are 256 bits then you're
 

00:06:40.680 --> 00:06:42.290 align:start position:0%
registers that are 256 bits then you're
gonna<00:06:40.860><c> compute</c><00:06:41.220><c> eight</c><00:06:41.520><c> you're</c><00:06:42.000><c> gonna</c><00:06:42.120><c> use</c>

00:06:42.290 --> 00:06:42.300 align:start position:0%
gonna compute eight you're gonna use
 

00:06:42.300 --> 00:06:43.610 align:start position:0%
gonna compute eight you're gonna use
only<00:06:42.479><c> two</c><00:06:42.720><c> registers</c><00:06:43.199><c> and</c><00:06:43.319><c> you're</c><00:06:43.440><c> gonna</c>

00:06:43.610 --> 00:06:43.620 align:start position:0%
only two registers and you're gonna
 

00:06:43.620 --> 00:06:45.590 align:start position:0%
only two registers and you're gonna
compute<00:06:43.979><c> eight</c><00:06:44.160><c> words</c><00:06:44.400><c> at</c><00:06:44.639><c> a</c><00:06:44.819><c> time</c><00:06:44.940><c> if</c><00:06:45.419><c> your</c>

00:06:45.590 --> 00:06:45.600 align:start position:0%
compute eight words at a time if your
 

00:06:45.600 --> 00:06:48.409 align:start position:0%
compute eight words at a time if your
computer<00:06:45.780><c> supports</c><00:06:46.620><c> AVX</c><00:06:47.039><c> 512</c><00:06:47.880><c> you're</c><00:06:48.240><c> gonna</c>

00:06:48.409 --> 00:06:48.419 align:start position:0%
computer supports AVX 512 you're gonna
 

00:06:48.419 --> 00:06:51.290 align:start position:0%
computer supports AVX 512 you're gonna
compute<00:06:48.900><c> all</c><00:06:49.680><c> of</c><00:06:49.800><c> them</c><00:06:49.919><c> the</c><00:06:50.220><c> 16</c><00:06:50.520><c> of</c><00:06:50.819><c> them</c><00:06:50.940><c> at</c><00:06:51.180><c> a</c>

00:06:51.290 --> 00:06:51.300 align:start position:0%
compute all of them the 16 of them at a
 

00:06:51.300 --> 00:06:53.529 align:start position:0%
compute all of them the 16 of them at a
time

00:06:53.529 --> 00:06:53.539 align:start position:0%
 
 

00:06:53.539 --> 00:06:56.029 align:start position:0%
 
1024<00:06:54.539><c> does</c><00:06:54.720><c> not</c><00:06:54.900><c> exist</c><00:06:55.259><c> yet</c><00:06:55.440><c> but</c><00:06:55.740><c> it's</c><00:06:55.860><c> already</c>

00:06:56.029 --> 00:06:56.039 align:start position:0%
1024 does not exist yet but it's already
 

00:06:56.039 --> 00:06:58.490 align:start position:0%
1024 does not exist yet but it's already
in<00:06:56.280><c> the</c><00:06:56.400><c> books</c><00:06:56.940><c> there's</c><00:06:57.600><c> two</c><00:06:57.840><c> options</c><00:06:58.139><c> into</c>

00:06:58.490 --> 00:06:58.500 align:start position:0%
in the books there's two options into
 

00:06:58.500 --> 00:07:00.590 align:start position:0%
in the books there's two options into
Computing<00:06:59.039><c> This</c><00:06:59.280><c> Modern</c><00:06:59.759><c> implementations</c>

00:07:00.590 --> 00:07:00.600 align:start position:0%
Computing This Modern implementations
 

00:07:00.600 --> 00:07:04.070 align:start position:0%
Computing This Modern implementations
either<00:07:01.080><c> do</c><00:07:01.620><c> this</c><00:07:02.220><c> this</c><00:07:02.580><c> vectorization</c><00:07:03.180><c> or</c><00:07:03.900><c> if</c>

00:07:04.070 --> 00:07:04.080 align:start position:0%
either do this this vectorization or if
 

00:07:04.080 --> 00:07:06.950 align:start position:0%
either do this this vectorization or if
your<00:07:04.259><c> CPU</c><00:07:05.120><c> implements</c><00:07:06.120><c> cryptographic</c>

00:07:06.950 --> 00:07:06.960 align:start position:0%
your CPU implements cryptographic
 

00:07:06.960 --> 00:07:09.650 align:start position:0%
your CPU implements cryptographic
extensions<00:07:07.440><c> like</c><00:07:08.280><c> what's</c><00:07:09.240><c> there</c><00:07:09.419><c> in</c><00:07:09.600><c> a</c>

00:07:09.650 --> 00:07:09.660 align:start position:0%
extensions like what's there in a
 

00:07:09.660 --> 00:07:12.890 align:start position:0%
extensions like what's there in a
picture<00:07:09.780><c> then</c><00:07:10.380><c> they</c><00:07:10.620><c> will</c><00:07:10.740><c> use</c><00:07:11.039><c> 128</c><00:07:11.940><c> bits</c>

00:07:12.890 --> 00:07:12.900 align:start position:0%
picture then they will use 128 bits
 

00:07:12.900 --> 00:07:14.689 align:start position:0%
picture then they will use 128 bits
registers<00:07:13.620><c> regardless</c><00:07:14.160><c> if</c><00:07:14.400><c> your</c><00:07:14.520><c> computer</c>

00:07:14.689 --> 00:07:14.699 align:start position:0%
registers regardless if your computer
 

00:07:14.699 --> 00:07:16.670 align:start position:0%
registers regardless if your computer
has<00:07:15.060><c> larger</c><00:07:15.419><c> registers</c><00:07:15.960><c> because</c>

00:07:16.670 --> 00:07:16.680 align:start position:0%
has larger registers because
 

00:07:16.680 --> 00:07:19.010 align:start position:0%
has larger registers because
cryptographic<00:07:17.639><c> extensions</c><00:07:18.120><c> can</c><00:07:18.600><c> compute</c>

00:07:19.010 --> 00:07:19.020 align:start position:0%
cryptographic extensions can compute
 

00:07:19.020 --> 00:07:20.930 align:start position:0%
cryptographic extensions can compute
forwards<00:07:19.560><c> at</c><00:07:19.680><c> a</c><00:07:19.800><c> time</c><00:07:19.919><c> much</c><00:07:20.160><c> faster</c><00:07:20.520><c> than</c>

00:07:20.930 --> 00:07:20.940 align:start position:0%
forwards at a time much faster than
 

00:07:20.940 --> 00:07:23.870 align:start position:0%
forwards at a time much faster than
vectorized<00:07:21.979><c> computations</c><00:07:22.979><c> but</c><00:07:23.520><c> the</c><00:07:23.639><c> point</c><00:07:23.759><c> I</c>

00:07:23.870 --> 00:07:23.880 align:start position:0%
vectorized computations but the point I
 

00:07:23.880 --> 00:07:25.189 align:start position:0%
vectorized computations but the point I
want<00:07:24.000><c> to</c><00:07:24.120><c> make</c><00:07:24.180><c> is</c><00:07:24.360><c> that</c><00:07:24.539><c> this</c><00:07:24.660><c> vectorization</c>

00:07:25.189 --> 00:07:25.199 align:start position:0%
want to make is that this vectorization
 

00:07:25.199 --> 00:07:27.409 align:start position:0%
want to make is that this vectorization
is<00:07:25.440><c> there</c><00:07:25.680><c> in</c><00:07:26.220><c> every</c><00:07:26.400><c> current</c><00:07:26.699><c> implementation</c>

00:07:27.409 --> 00:07:27.419 align:start position:0%
is there in every current implementation
 

00:07:27.419 --> 00:07:30.770 align:start position:0%
is there in every current implementation
this<00:07:27.780><c> is</c><00:07:27.900><c> since</c><00:07:28.080><c> Intel's</c><00:07:28.880><c> uh</c><00:07:29.880><c> since</c><00:07:30.419><c> that's</c>

00:07:30.770 --> 00:07:30.780 align:start position:0%
this is since Intel's uh since that's
 

00:07:30.780 --> 00:07:32.689 align:start position:0%
this is since Intel's uh since that's
white<00:07:31.020><c> paper</c><00:07:31.259><c> also</c><00:07:32.039><c> Computing</c><00:07:32.400><c> the</c><00:07:32.580><c> words</c>

00:07:32.689 --> 00:07:32.699 align:start position:0%
white paper also Computing the words
 

00:07:32.699 --> 00:07:35.510 align:start position:0%
white paper also Computing the words
like<00:07:32.940><c> this</c><00:07:33.120><c> is</c><00:07:33.539><c> useful</c><00:07:33.900><c> because</c><00:07:34.560><c> since</c><00:07:35.280><c> you</c>

00:07:35.510 --> 00:07:35.520 align:start position:0%
like this is useful because since you
 

00:07:35.520 --> 00:07:37.010 align:start position:0%
like this is useful because since you
can<00:07:35.639><c> compute</c><00:07:35.940><c> the</c><00:07:36.060><c> words</c><00:07:36.240><c> and</c><00:07:36.539><c> at</c><00:07:36.720><c> the</c><00:07:36.840><c> same</c>

00:07:37.010 --> 00:07:37.020 align:start position:0%
can compute the words and at the same
 

00:07:37.020 --> 00:07:37.790 align:start position:0%
can compute the words and at the same
time

00:07:37.790 --> 00:07:37.800 align:start position:0%
time
 

00:07:37.800 --> 00:07:40.129 align:start position:0%
time
uh<00:07:38.639><c> pass</c><00:07:38.940><c> through</c><00:07:39.180><c> some</c><00:07:39.360><c> rounds</c><00:07:39.720><c> so</c><00:07:39.840><c> let's</c><00:07:40.020><c> say</c>

00:07:40.129 --> 00:07:40.139 align:start position:0%
uh pass through some rounds so let's say
 

00:07:40.139 --> 00:07:42.050 align:start position:0%
uh pass through some rounds so let's say
that<00:07:40.319><c> you</c><00:07:40.500><c> computed</c><00:07:40.919><c> the</c><00:07:41.099><c> fifth</c><00:07:41.400><c> word</c><00:07:41.580><c> then</c>

00:07:42.050 --> 00:07:42.060 align:start position:0%
that you computed the fifth word then
 

00:07:42.060 --> 00:07:44.990 align:start position:0%
that you computed the fifth word then
you<00:07:42.300><c> can</c><00:07:42.479><c> pass</c><00:07:42.840><c> up</c><00:07:43.080><c> to</c><00:07:43.259><c> the</c><00:07:43.380><c> fifth</c><00:07:43.680><c> round</c><00:07:44.000><c> then</c>

00:07:44.990 --> 00:07:45.000 align:start position:0%
you can pass up to the fifth round then
 

00:07:45.000 --> 00:07:47.270 align:start position:0%
you can pass up to the fifth round then
you<00:07:45.419><c> can</c><00:07:45.539><c> mix</c><00:07:45.840><c> scalar</c><00:07:46.620><c> operations</c><00:07:46.919><c> with</c>

00:07:47.270 --> 00:07:47.280 align:start position:0%
you can mix scalar operations with
 

00:07:47.280 --> 00:07:48.770 align:start position:0%
you can mix scalar operations with
Vector<00:07:47.580><c> operations</c><00:07:47.940><c> and</c><00:07:48.180><c> the</c><00:07:48.300><c> CPU</c><00:07:48.599><c> would</c>

00:07:48.770 --> 00:07:48.780 align:start position:0%
Vector operations and the CPU would
 

00:07:48.780 --> 00:07:51.650 align:start position:0%
Vector operations and the CPU would
perform<00:07:48.960><c> this</c><00:07:49.259><c> in</c><00:07:49.440><c> parallel</c><00:07:49.860><c> this</c><00:07:50.400><c> views</c><00:07:50.940><c> can</c>

00:07:51.650 --> 00:07:51.660 align:start position:0%
perform this in parallel this views can
 

00:07:51.660 --> 00:07:54.409 align:start position:0%
perform this in parallel this views can
take<00:07:51.900><c> has</c><00:07:52.680><c> several</c><00:07:52.979><c> ports</c><00:07:53.460><c> and</c><00:07:53.940><c> can</c><00:07:54.180><c> take</c>

00:07:54.409 --> 00:07:54.419 align:start position:0%
take has several ports and can take
 

00:07:54.419 --> 00:07:56.330 align:start position:0%
take has several ports and can take
different<00:07:54.960><c> types</c><00:07:55.440><c> of</c><00:07:55.500><c> operations</c><00:07:55.860><c> at</c><00:07:56.160><c> the</c>

00:07:56.330 --> 00:07:56.340 align:start position:0%
different types of operations at the
 

00:07:56.340 --> 00:07:58.309 align:start position:0%
different types of operations at the
same<00:07:56.460><c> time</c><00:07:56.580><c> so</c><00:07:57.180><c> you</c><00:07:57.360><c> can't</c><00:07:57.479><c> be</c><00:07:57.660><c> Computing</c><00:07:58.080><c> the</c>

00:07:58.309 --> 00:07:58.319 align:start position:0%
same time so you can't be Computing the
 

00:07:58.319 --> 00:08:00.770 align:start position:0%
same time so you can't be Computing the
fifth<00:07:58.740><c> round</c><00:07:59.220><c> that</c><00:07:59.819><c> is</c><00:08:00.000><c> a</c><00:08:00.180><c> computation</c><00:08:00.539><c> that</c>

00:08:00.770 --> 00:08:00.780 align:start position:0%
fifth round that is a computation that
 

00:08:00.780 --> 00:08:03.170 align:start position:0%
fifth round that is a computation that
it<00:08:00.960><c> has</c><00:08:01.199><c> to</c><00:08:01.319><c> be</c><00:08:01.500><c> done</c><00:08:01.740><c> on</c><00:08:02.280><c> the</c><00:08:02.460><c> scalar</c><00:08:02.819><c> part</c><00:08:03.000><c> of</c>

00:08:03.170 --> 00:08:03.180 align:start position:0%
it has to be done on the scalar part of
 

00:08:03.180 --> 00:08:05.570 align:start position:0%
it has to be done on the scalar part of
the<00:08:03.300><c> CPU</c><00:08:03.660><c> because</c><00:08:03.900><c> it</c><00:08:04.080><c> has</c><00:08:04.259><c> to</c><00:08:04.380><c> be</c><00:08:04.560><c> uh</c><00:08:05.340><c> it</c>

00:08:05.570 --> 00:08:05.580 align:start position:0%
the CPU because it has to be uh it
 

00:08:05.580 --> 00:08:07.249 align:start position:0%
the CPU because it has to be uh it
cannot<00:08:05.759><c> be</c><00:08:05.940><c> in</c><00:08:06.120><c> parallel</c>

00:08:07.249 --> 00:08:07.259 align:start position:0%
cannot be in parallel
 

00:08:07.259 --> 00:08:09.290 align:start position:0%
cannot be in parallel
and<00:08:07.800><c> at</c><00:08:08.039><c> the</c><00:08:08.160><c> same</c><00:08:08.220><c> time</c><00:08:08.400><c> you're</c><00:08:08.759><c> Computing</c>

00:08:09.290 --> 00:08:09.300 align:start position:0%
and at the same time you're Computing
 

00:08:09.300 --> 00:08:12.110 align:start position:0%
and at the same time you're Computing
the<00:08:09.599><c> sixth</c><00:08:10.259><c> word</c><00:08:10.440><c> in</c><00:08:11.039><c> parallel</c>

00:08:12.110 --> 00:08:12.120 align:start position:0%
the sixth word in parallel
 

00:08:12.120 --> 00:08:14.390 align:start position:0%
the sixth word in parallel
on<00:08:12.720><c> on</c><00:08:12.900><c> Vector</c><00:08:13.259><c> registers</c>

00:08:14.390 --> 00:08:14.400 align:start position:0%
on on Vector registers
 

00:08:14.400 --> 00:08:17.990 align:start position:0%
on on Vector registers
okay<00:08:14.880><c> so</c><00:08:15.300><c> I've</c><00:08:15.539><c> covered</c><00:08:16.259><c> what</c><00:08:16.919><c> is</c><00:08:17.099><c> what</c><00:08:17.639><c> is</c><00:08:17.819><c> a</c>

00:08:17.990 --> 00:08:18.000 align:start position:0%
okay so I've covered what is what is a
 

00:08:18.000 --> 00:08:21.110 align:start position:0%
okay so I've covered what is what is a
typical<00:08:18.240><c> uh</c><00:08:19.080><c> implementation</c><00:08:19.800><c> of</c><00:08:20.039><c> hashing</c><00:08:20.400><c> and</c>

00:08:21.110 --> 00:08:21.120 align:start position:0%
typical uh implementation of hashing and
 

00:08:21.120 --> 00:08:23.390 align:start position:0%
typical uh implementation of hashing and
this<00:08:21.720><c> is</c><00:08:21.900><c> the</c><00:08:22.080><c> the</c><00:08:22.319><c> thing</c><00:08:22.560><c> to</c><00:08:22.860><c> remember</c><00:08:22.979><c> from</c>

00:08:23.390 --> 00:08:23.400 align:start position:0%
this is the the thing to remember from
 

00:08:23.400 --> 00:08:25.730 align:start position:0%
this is the the thing to remember from
the<00:08:23.580><c> whole</c><00:08:23.759><c> part</c><00:08:24.000><c> from</c><00:08:24.660><c> the</c><00:08:24.780><c> whole</c><00:08:25.139><c> purpose</c><00:08:25.500><c> of</c>

00:08:25.730 --> 00:08:25.740 align:start position:0%
the whole part from the whole purpose of
 

00:08:25.740 --> 00:08:27.650 align:start position:0%
the whole part from the whole purpose of
the<00:08:25.860><c> dot</c><00:08:26.099><c> is</c><00:08:26.460><c> that</c><00:08:26.580><c> the</c><00:08:26.699><c> hasher</c><00:08:27.120><c> signature</c><00:08:27.539><c> is</c>

00:08:27.650 --> 00:08:27.660 align:start position:0%
the dot is that the hasher signature is
 

00:08:27.660 --> 00:08:29.450 align:start position:0%
the dot is that the hasher signature is
this<00:08:27.900><c> in</c><00:08:28.500><c> either</c><00:08:28.680><c> language</c><00:08:29.039><c> is</c><00:08:29.280><c> something</c>

00:08:29.450 --> 00:08:29.460 align:start position:0%
this in either language is something
 

00:08:29.460 --> 00:08:31.129 align:start position:0%
this in either language is something
like<00:08:29.699><c> this</c><00:08:29.879><c> it's</c><00:08:30.240><c> something</c><00:08:30.419><c> that</c><00:08:30.720><c> takes</c><00:08:30.960><c> an</c>

00:08:31.129 --> 00:08:31.139 align:start position:0%
like this it's something that takes an
 

00:08:31.139 --> 00:08:34.250 align:start position:0%
like this it's something that takes an
arbitrary<00:08:31.560><c> length</c><00:08:32.399><c> bite</c><00:08:32.940><c> slice</c><00:08:33.360><c> and</c><00:08:34.020><c> it</c><00:08:34.080><c> gives</c>

00:08:34.250 --> 00:08:34.260 align:start position:0%
arbitrary length bite slice and it gives
 

00:08:34.260 --> 00:08:37.190 align:start position:0%
arbitrary length bite slice and it gives
you<00:08:34.440><c> back</c><00:08:34.620><c> 32</c><00:08:35.039><c> bytes</c><00:08:35.459><c> which</c><00:08:35.760><c> is</c><00:08:35.880><c> the</c><00:08:36.120><c> hash</c>

00:08:37.190 --> 00:08:37.200 align:start position:0%
you back 32 bytes which is the hash
 

00:08:37.200 --> 00:08:39.170 align:start position:0%
you back 32 bytes which is the hash
so<00:08:37.620><c> it</c><00:08:37.800><c> takes</c><00:08:37.919><c> an</c><00:08:38.219><c> arbitrary</c><00:08:38.640><c> linked</c><00:08:39.000><c> message</c>

00:08:39.170 --> 00:08:39.180 align:start position:0%
so it takes an arbitrary linked message
 

00:08:39.180 --> 00:08:40.850 align:start position:0%
so it takes an arbitrary linked message
and<00:08:39.539><c> it</c><00:08:39.659><c> gives</c><00:08:39.779><c> you</c><00:08:39.959><c> one</c><00:08:40.140><c> it</c><00:08:40.380><c> gives</c><00:08:40.560><c> you</c><00:08:40.740><c> a</c>

00:08:40.850 --> 00:08:40.860 align:start position:0%
and it gives you one it gives you a
 

00:08:40.860 --> 00:08:43.490 align:start position:0%
and it gives you one it gives you a
digest<00:08:41.279><c> and</c><00:08:42.060><c> this</c><00:08:42.240><c> is</c><00:08:42.300><c> something</c><00:08:42.539><c> that</c><00:08:43.320><c> you're</c>

00:08:43.490 --> 00:08:43.500 align:start position:0%
digest and this is something that you're
 

00:08:43.500 --> 00:08:44.930 align:start position:0%
digest and this is something that you're
not<00:08:43.680><c> gonna</c><00:08:43.860><c> beat</c><00:08:44.039><c> you're</c><00:08:44.459><c> not</c><00:08:44.640><c> going</c><00:08:44.760><c> to</c>

00:08:44.930 --> 00:08:44.940 align:start position:0%
not gonna beat you're not going to
 

00:08:44.940 --> 00:08:47.269 align:start position:0%
not gonna beat you're not going to
implement<00:08:45.240><c> this</c><00:08:45.540><c> better</c><00:08:45.720><c> than</c><00:08:46.020><c> open</c><00:08:46.200><c> SSL</c><00:08:46.800><c> no</c>

00:08:47.269 --> 00:08:47.279 align:start position:0%
implement this better than open SSL no
 

00:08:47.279 --> 00:08:48.889 align:start position:0%
implement this better than open SSL no
one<00:08:47.459><c> is</c><00:08:47.580><c> going</c><00:08:47.760><c> to</c><00:08:47.880><c> do</c><00:08:47.940><c> you</c><00:08:48.180><c> perhaps</c><00:08:48.480><c> can</c><00:08:48.600><c> do</c><00:08:48.779><c> it</c>

00:08:48.889 --> 00:08:48.899 align:start position:0%
one is going to do you perhaps can do it
 

00:08:48.899 --> 00:08:50.630 align:start position:0%
one is going to do you perhaps can do it
for<00:08:49.080><c> one</c><00:08:49.320><c> CPU</c><00:08:49.740><c> you're</c><00:08:50.040><c> not</c><00:08:50.220><c> going</c><00:08:50.339><c> to</c><00:08:50.399><c> write</c><00:08:50.519><c> an</c>

00:08:50.630 --> 00:08:50.640 align:start position:0%
for one CPU you're not going to write an
 

00:08:50.640 --> 00:08:52.250 align:start position:0%
for one CPU you're not going to write an
implementation<00:08:51.060><c> faster</c><00:08:51.540><c> than</c><00:08:51.899><c> what</c><00:08:52.080><c> is</c>

00:08:52.250 --> 00:08:52.260 align:start position:0%
implementation faster than what is
 

00:08:52.260 --> 00:08:53.570 align:start position:0%
implementation faster than what is
already<00:08:52.500><c> there</c>

00:08:53.570 --> 00:08:53.580 align:start position:0%
already there
 

00:08:53.580 --> 00:08:57.290 align:start position:0%
already there
however<00:08:54.440><c> we</c><00:08:55.440><c> use</c><00:08:55.800><c> hashing</c><00:08:56.519><c> in</c><00:08:57.000><c> a</c><00:08:57.120><c> very</c>

00:08:57.290 --> 00:08:57.300 align:start position:0%
however we use hashing in a very
 

00:08:57.300 --> 00:09:00.350 align:start position:0%
however we use hashing in a very
restricted<00:08:57.899><c> scenario</c><00:08:58.320><c> we</c><00:08:58.920><c> use</c><00:08:59.100><c> hashing</c><00:09:00.000><c> to</c>

00:09:00.350 --> 00:09:00.360 align:start position:0%
restricted scenario we use hashing to
 

00:09:00.360 --> 00:09:03.170 align:start position:0%
restricted scenario we use hashing to
Hash<00:09:00.660><c> Merkle</c><00:09:01.140><c> traits</c><00:09:01.860><c> a</c><00:09:02.279><c> miracle</c><00:09:02.700><c> trees</c><00:09:03.000><c> are</c>

00:09:03.170 --> 00:09:03.180 align:start position:0%
Hash Merkle traits a miracle trees are
 

00:09:03.180 --> 00:09:07.370 align:start position:0%
Hash Merkle traits a miracle trees are
not<00:09:03.360><c> arbitrary</c><00:09:03.959><c> length</c><00:09:04.680><c> Merkel</c><00:09:05.399><c> trees</c><00:09:05.839><c> are</c><00:09:06.839><c> in</c>

00:09:07.370 --> 00:09:07.380 align:start position:0%
not arbitrary length Merkel trees are in
 

00:09:07.380 --> 00:09:08.930 align:start position:0%
not arbitrary length Merkel trees are in
the<00:09:07.500><c> case</c><00:09:07.680><c> of</c><00:09:07.860><c> the</c><00:09:08.040><c> consensus</c><00:09:08.399><c> layer</c><00:09:08.760><c> for</c>

00:09:08.930 --> 00:09:08.940 align:start position:0%
the case of the consensus layer for
 

00:09:08.940 --> 00:09:10.850 align:start position:0%
the case of the consensus layer for
example<00:09:09.120><c> where</c><00:09:09.420><c> the</c><00:09:09.600><c> nodes</c><00:09:09.839><c> are</c><00:09:10.080><c> 32</c><00:09:10.440><c> bytes</c>

00:09:10.850 --> 00:09:10.860 align:start position:0%
example where the nodes are 32 bytes
 

00:09:10.860 --> 00:09:12.949 align:start position:0%
example where the nodes are 32 bytes
there's<00:09:11.279><c> something</c><00:09:11.459><c> like</c><00:09:11.700><c> this</c><00:09:11.880><c> each</c><00:09:12.660><c> one</c><00:09:12.839><c> of</c>

00:09:12.949 --> 00:09:12.959 align:start position:0%
there's something like this each one of
 

00:09:12.959 --> 00:09:15.949 align:start position:0%
there's something like this each one of
these<00:09:13.200><c> nodes</c><00:09:13.500><c> represent</c><00:09:14.100><c> 32</c><00:09:14.880><c> bytes</c><00:09:15.300><c> and</c><00:09:15.779><c> each</c>

00:09:15.949 --> 00:09:15.959 align:start position:0%
these nodes represent 32 bytes and each
 

00:09:15.959 --> 00:09:18.170 align:start position:0%
these nodes represent 32 bytes and each
parent<00:09:16.200><c> node</c><00:09:16.620><c> has</c><00:09:16.860><c> only</c><00:09:17.040><c> two</c><00:09:17.339><c> children</c><00:09:17.580><c> and</c>

00:09:18.170 --> 00:09:18.180 align:start position:0%
parent node has only two children and
 

00:09:18.180 --> 00:09:20.630 align:start position:0%
parent node has only two children and
these<00:09:18.480><c> two</c><00:09:18.540><c> children</c><00:09:18.800><c> are</c><00:09:19.800><c> hashed</c><00:09:20.279><c> together</c>

00:09:20.630 --> 00:09:20.640 align:start position:0%
these two children are hashed together
 

00:09:20.640 --> 00:09:24.490 align:start position:0%
these two children are hashed together
so<00:09:21.240><c> the</c><00:09:21.660><c> two</c><00:09:22.140><c> children</c><00:09:22.399><c> are</c><00:09:23.399><c> 64</c><00:09:23.820><c> bytes</c><00:09:24.180><c> in</c>

00:09:24.490 --> 00:09:24.500 align:start position:0%
so the two children are 64 bytes in
 

00:09:24.500 --> 00:09:26.990 align:start position:0%
so the two children are 64 bytes in
concatenated<00:09:25.500><c> you</c><00:09:25.980><c> hash</c><00:09:26.220><c> them</c><00:09:26.459><c> and</c><00:09:26.760><c> you</c><00:09:26.880><c> get</c>

00:09:26.990 --> 00:09:27.000 align:start position:0%
concatenated you hash them and you get
 

00:09:27.000 --> 00:09:29.630 align:start position:0%
concatenated you hash them and you get
the<00:09:27.120><c> hash</c><00:09:27.420><c> of</c><00:09:27.839><c> the</c><00:09:27.959><c> part</c><00:09:28.140><c> you</c><00:09:28.860><c> get</c><00:09:29.040><c> the</c><00:09:29.220><c> what</c>

00:09:29.630 --> 00:09:29.640 align:start position:0%
the hash of the part you get the what
 

00:09:29.640 --> 00:09:31.850 align:start position:0%
the hash of the part you get the what
what<00:09:29.820><c> goes</c><00:09:30.120><c> in</c><00:09:30.240><c> the</c><00:09:30.360><c> part</c><00:09:30.540><c> so</c><00:09:31.200><c> this</c><00:09:31.380><c> is</c><00:09:31.500><c> what</c><00:09:31.680><c> we</c>

00:09:31.850 --> 00:09:31.860 align:start position:0%
what goes in the part so this is what we
 

00:09:31.860 --> 00:09:36.170 align:start position:0%
what goes in the part so this is what we
we<00:09:32.100><c> hash</c><00:09:32.399><c> typically</c><00:09:33.680><c> and</c><00:09:34.680><c> we</c><00:09:35.519><c> observe</c><00:09:36.000><c> two</c>

00:09:36.170 --> 00:09:36.180 align:start position:0%
we hash typically and we observe two
 

00:09:36.180 --> 00:09:37.190 align:start position:0%
we hash typically and we observe two
things

00:09:37.190 --> 00:09:37.200 align:start position:0%
things
 

00:09:37.200 --> 00:09:39.110 align:start position:0%
things
well<00:09:37.740><c> actually</c><00:09:37.980><c> the</c><00:09:38.279><c> execution</c><00:09:38.640><c> layer</c><00:09:39.000><c> has</c>

00:09:39.110 --> 00:09:39.120 align:start position:0%
well actually the execution layer has
 

00:09:39.120 --> 00:09:40.430 align:start position:0%
well actually the execution layer has
something<00:09:39.300><c> completely</c><00:09:39.720><c> different</c><00:09:39.899><c> but</c><00:09:40.260><c> still</c>

00:09:40.430 --> 00:09:40.440 align:start position:0%
something completely different but still
 

00:09:40.440 --> 00:09:41.690 align:start position:0%
something completely different but still
the<00:09:40.680><c> same</c><00:09:40.860><c> technique</c><00:09:41.100><c> is</c><00:09:41.220><c> going</c><00:09:41.399><c> to</c><00:09:41.459><c> apply</c>

00:09:41.690 --> 00:09:41.700 align:start position:0%
the same technique is going to apply
 

00:09:41.700 --> 00:09:44.150 align:start position:0%
the same technique is going to apply
what<00:09:42.420><c> we</c><00:09:42.660><c> observe</c><00:09:43.080><c> immediately</c><00:09:43.440><c> is</c><00:09:43.860><c> the</c>

00:09:44.150 --> 00:09:44.160 align:start position:0%
what we observe immediately is the
 

00:09:44.160 --> 00:09:45.769 align:start position:0%
what we observe immediately is the
following<00:09:44.580><c> thing</c><00:09:44.760><c> first</c><00:09:45.180><c> of</c><00:09:45.300><c> all</c><00:09:45.420><c> we're</c><00:09:45.660><c> not</c>

00:09:45.769 --> 00:09:45.779 align:start position:0%
following thing first of all we're not
 

00:09:45.779 --> 00:09:47.570 align:start position:0%
following thing first of all we're not
hashing<00:09:46.140><c> arbitrary</c><00:09:46.560><c> length</c><00:09:46.860><c> we're</c><00:09:47.100><c> hashing</c>

00:09:47.570 --> 00:09:47.580 align:start position:0%
hashing arbitrary length we're hashing
 

00:09:47.580 --> 00:09:50.810 align:start position:0%
hashing arbitrary length we're hashing
every<00:09:47.940><c> single</c><00:09:48.240><c> time</c><00:09:48.420><c> 64</c><00:09:49.019><c> bytes</c><00:09:49.980><c> and</c><00:09:50.459><c> second</c><00:09:50.580><c> of</c>

00:09:50.810 --> 00:09:50.820 align:start position:0%
every single time 64 bytes and second of
 

00:09:50.820 --> 00:09:53.150 align:start position:0%
every single time 64 bytes and second of
all<00:09:50.940><c> we</c><00:09:51.300><c> can</c><00:09:51.480><c> hash</c><00:09:51.660><c> this</c><00:09:51.899><c> in</c><00:09:52.080><c> parallel</c><00:09:52.380><c> you</c>

00:09:53.150 --> 00:09:53.160 align:start position:0%
all we can hash this in parallel you
 

00:09:53.160 --> 00:09:55.009 align:start position:0%
all we can hash this in parallel you
don't<00:09:53.399><c> need</c><00:09:53.519><c> to</c><00:09:53.700><c> you</c><00:09:54.060><c> can</c><00:09:54.180><c> hash</c><00:09:54.360><c> the</c><00:09:54.600><c> blue</c><00:09:54.779><c> one</c>

00:09:55.009 --> 00:09:55.019 align:start position:0%
don't need to you can hash the blue one
 

00:09:55.019 --> 00:09:58.130 align:start position:0%
don't need to you can hash the blue one
by<00:09:55.620><c> knowing</c><00:09:55.980><c> the</c><00:09:56.279><c> entire</c><00:09:56.519><c> left</c><00:09:57.060><c> subtree</c><00:09:57.540><c> and</c>

00:09:58.130 --> 00:09:58.140 align:start position:0%
by knowing the entire left subtree and
 

00:09:58.140 --> 00:09:59.690 align:start position:0%
by knowing the entire left subtree and
hash<00:09:58.440><c> the</c><00:09:58.680><c> yellow</c><00:09:58.860><c> one</c><00:09:59.100><c> completely</c><00:09:59.519><c> in</c>

00:09:59.690 --> 00:09:59.700 align:start position:0%
hash the yellow one completely in
 

00:09:59.700 --> 00:10:02.750 align:start position:0%
hash the yellow one completely in
parallel<00:10:00.000><c> in</c><00:10:00.300><c> the</c><00:10:00.420><c> other</c><00:10:00.540><c> side</c><00:10:01.279><c> of</c><00:10:02.279><c> course</c><00:10:02.399><c> you</c>

00:10:02.750 --> 00:10:02.760 align:start position:0%
parallel in the other side of course you
 

00:10:02.760 --> 00:10:04.190 align:start position:0%
parallel in the other side of course you
can<00:10:02.880><c> do</c><00:10:03.000><c> this</c><00:10:03.120><c> in</c><00:10:03.240><c> parallel</c><00:10:03.600><c> if</c><00:10:03.959><c> you</c><00:10:04.019><c> have</c><00:10:04.140><c> a</c>

00:10:04.190 --> 00:10:04.200 align:start position:0%
can do this in parallel if you have a
 

00:10:04.200 --> 00:10:06.170 align:start position:0%
can do this in parallel if you have a
CPU<00:10:04.500><c> that</c><00:10:04.680><c> if</c><00:10:05.040><c> you</c><00:10:05.100><c> have</c><00:10:05.220><c> two</c><00:10:05.339><c> CPUs</c><00:10:05.760><c> you</c><00:10:06.120><c> can</c>

00:10:06.170 --> 00:10:06.180 align:start position:0%
CPU that if you have two CPUs you can
 

00:10:06.180 --> 00:10:08.269 align:start position:0%
CPU that if you have two CPUs you can
just<00:10:06.300><c> use</c><00:10:06.480><c> two</c><00:10:06.720><c> threads</c><00:10:07.080><c> to</c><00:10:07.260><c> Hash</c><00:10:07.440><c> this</c><00:10:07.740><c> and</c>

00:10:08.269 --> 00:10:08.279 align:start position:0%
just use two threads to Hash this and
 

00:10:08.279 --> 00:10:10.550 align:start position:0%
just use two threads to Hash this and
this<00:10:08.459><c> is</c><00:10:08.580><c> exploited</c><00:10:09.120><c> in</c><00:10:09.720><c> the</c><00:10:09.839><c> consensus</c><00:10:10.200><c> layer</c>

00:10:10.550 --> 00:10:10.560 align:start position:0%
this is exploited in the consensus layer
 

00:10:10.560 --> 00:10:12.110 align:start position:0%
this is exploited in the consensus layer
I<00:10:10.740><c> don't</c><00:10:10.860><c> know</c><00:10:10.980><c> if</c><00:10:11.100><c> any</c><00:10:11.279><c> other</c><00:10:11.519><c> besides</c>

00:10:12.110 --> 00:10:12.120 align:start position:0%
I don't know if any other besides
 

00:10:12.120 --> 00:10:14.630 align:start position:0%
I don't know if any other besides
Lighthouse<00:10:12.480><c> uses</c><00:10:12.959><c> this</c><00:10:13.560><c> but</c><00:10:14.040><c> I</c><00:10:14.279><c> want</c><00:10:14.399><c> to</c><00:10:14.519><c> use</c>

00:10:14.630 --> 00:10:14.640 align:start position:0%
Lighthouse uses this but I want to use
 

00:10:14.640 --> 00:10:17.090 align:start position:0%
Lighthouse uses this but I want to use
this<00:10:14.880><c> I</c><00:10:15.060><c> want</c><00:10:15.240><c> to</c><00:10:15.360><c> say</c><00:10:15.560><c> to</c><00:10:16.560><c> talk</c><00:10:16.740><c> about</c><00:10:16.860><c> a</c>

00:10:17.090 --> 00:10:17.100 align:start position:0%
this I want to say to talk about a
 

00:10:17.100 --> 00:10:18.650 align:start position:0%
this I want to say to talk about a
different<00:10:17.220><c> kind</c><00:10:17.399><c> of</c><00:10:17.519><c> parallelization</c><00:10:18.060><c> you</c>

00:10:18.650 --> 00:10:18.660 align:start position:0%
different kind of parallelization you
 

00:10:18.660 --> 00:10:20.449 align:start position:0%
different kind of parallelization you
can<00:10:18.779><c> parallelize</c><00:10:19.560><c> this</c><00:10:19.860><c> in</c><00:10:20.279><c> different</c>

00:10:20.449 --> 00:10:20.459 align:start position:0%
can parallelize this in different
 

00:10:20.459 --> 00:10:22.670 align:start position:0%
can parallelize this in different
threads<00:10:21.060><c> but</c><00:10:21.660><c> the</c><00:10:21.839><c> point</c><00:10:22.019><c> I</c><00:10:22.200><c> want</c><00:10:22.380><c> to</c><00:10:22.500><c> make</c><00:10:22.560><c> is</c>

00:10:22.670 --> 00:10:22.680 align:start position:0%
threads but the point I want to make is
 

00:10:22.680 --> 00:10:24.470 align:start position:0%
threads but the point I want to make is
that<00:10:22.860><c> you</c><00:10:22.980><c> can</c><00:10:23.100><c> do</c><00:10:23.220><c> this</c><00:10:23.459><c> by</c><00:10:23.820><c> using</c><00:10:24.120><c> Vector</c>

00:10:24.470 --> 00:10:24.480 align:start position:0%
that you can do this by using Vector
 

00:10:24.480 --> 00:10:25.910 align:start position:0%
that you can do this by using Vector
instructions

00:10:25.910 --> 00:10:25.920 align:start position:0%
instructions
 

00:10:25.920 --> 00:10:28.670 align:start position:0%
instructions
this<00:10:26.580><c> is</c><00:10:26.820><c> the</c><00:10:27.120><c> the</c><00:10:27.480><c> typical</c><00:10:27.899><c> this</c><00:10:28.380><c> is</c><00:10:28.440><c> the</c><00:10:28.560><c> one</c>

00:10:28.670 --> 00:10:28.680 align:start position:0%
this is the the typical this is the one
 

00:10:28.680 --> 00:10:30.290 align:start position:0%
this is the the typical this is the one
that<00:10:28.800><c> is</c><00:10:28.920><c> in</c><00:10:29.100><c> the</c><00:10:29.220><c> specs</c><00:10:29.580><c> in</c><00:10:29.760><c> the</c><00:10:29.880><c> consensus</c>

00:10:30.290 --> 00:10:30.300 align:start position:0%
that is in the specs in the consensus
 

00:10:30.300 --> 00:10:32.269 align:start position:0%
that is in the specs in the consensus
layer<00:10:30.660><c> specs</c><00:10:31.080><c> this</c><00:10:31.500><c> is</c><00:10:31.560><c> the</c><00:10:31.620><c> implementation</c><00:10:32.040><c> I</c>

00:10:32.269 --> 00:10:32.279 align:start position:0%
layer specs this is the implementation I
 

00:10:32.279 --> 00:10:33.650 align:start position:0%
layer specs this is the implementation I
think<00:10:32.339><c> this</c><00:10:32.519><c> is</c><00:10:32.580><c> vitalik's</c><00:10:33.240><c> implementation</c>

00:10:33.650 --> 00:10:33.660 align:start position:0%
think this is vitalik's implementation
 

00:10:33.660 --> 00:10:36.710 align:start position:0%
think this is vitalik's implementation
this<00:10:34.320><c> is</c><00:10:34.440><c> a</c><00:10:34.560><c> flat</c><00:10:34.860><c> array</c><00:10:35.240><c> approach</c><00:10:36.240><c> to</c><00:10:36.480><c> having</c>

00:10:36.710 --> 00:10:36.720 align:start position:0%
this is a flat array approach to having
 

00:10:36.720 --> 00:10:39.350 align:start position:0%
this is a flat array approach to having
a<00:10:37.080><c> miracle</c><00:10:37.500><c> tree</c><00:10:37.680><c> I</c><00:10:38.459><c> highlighted</c><00:10:39.000><c> the</c><00:10:39.180><c> line</c>

00:10:39.350 --> 00:10:39.360 align:start position:0%
a miracle tree I highlighted the line
 

00:10:39.360 --> 00:10:41.810 align:start position:0%
a miracle tree I highlighted the line
where<00:10:39.899><c> you're</c><00:10:40.260><c> Computing</c><00:10:40.680><c> the</c><00:10:40.860><c> hash</c><00:10:41.160><c> of</c><00:10:41.640><c> the</c>

00:10:41.810 --> 00:10:41.820 align:start position:0%
where you're Computing the hash of the
 

00:10:41.820 --> 00:10:45.050 align:start position:0%
where you're Computing the hash of the
parent<00:10:41.940><c> by</c><00:10:42.779><c> hashing</c><00:10:43.800><c> the</c><00:10:44.399><c> two</c><00:10:44.519><c> children</c><00:10:44.760><c> that</c>

00:10:45.050 --> 00:10:45.060 align:start position:0%
parent by hashing the two children that
 

00:10:45.060 --> 00:10:47.750 align:start position:0%
parent by hashing the two children that
are<00:10:45.240><c> concatenated</c><00:10:45.899><c> the</c><00:10:46.560><c> top</c><00:10:46.680><c> one</c><00:10:46.920><c> is</c><00:10:47.339><c> uh</c>

00:10:47.750 --> 00:10:47.760 align:start position:0%
are concatenated the top one is uh
 

00:10:47.760 --> 00:10:50.690 align:start position:0%
are concatenated the top one is uh
different<00:10:48.440><c> memory</c><00:10:49.440><c> layout</c><00:10:49.800><c> this</c><00:10:50.220><c> is</c><00:10:50.339><c> Proto</c>

00:10:50.690 --> 00:10:50.700 align:start position:0%
different memory layout this is Proto
 

00:10:50.700 --> 00:10:53.389 align:start position:0%
different memory layout this is Proto
lambda's<00:10:51.420><c> implementation</c><00:10:52.200><c> on</c><00:10:52.920><c> remarkable</c>

00:10:53.389 --> 00:10:53.399 align:start position:0%
lambda's implementation on remarkable
 

00:10:53.399 --> 00:10:55.610 align:start position:0%
lambda's implementation on remarkable
the<00:10:54.060><c> point</c><00:10:54.180><c> is</c><00:10:54.360><c> that</c><00:10:54.660><c> it's</c><00:10:54.959><c> the</c><00:10:55.200><c> same</c><00:10:55.380><c> kind</c><00:10:55.500><c> of</c>

00:10:55.610 --> 00:10:55.620 align:start position:0%
the point is that it's the same kind of
 

00:10:55.620 --> 00:10:57.470 align:start position:0%
the point is that it's the same kind of
hashing<00:10:56.040><c> you</c><00:10:56.220><c> take</c><00:10:56.399><c> the</c><00:10:56.579><c> two</c><00:10:56.760><c> children</c><00:10:56.940><c> and</c>

00:10:57.470 --> 00:10:57.480 align:start position:0%
hashing you take the two children and
 

00:10:57.480 --> 00:10:59.389 align:start position:0%
hashing you take the two children and
you<00:10:57.540><c> hash</c><00:10:57.779><c> them</c><00:10:58.019><c> and</c><00:10:58.320><c> you</c><00:10:58.440><c> hash</c><00:10:58.680><c> two</c><00:10:58.860><c> blocks</c><00:10:59.279><c> at</c>

00:10:59.389 --> 00:10:59.399 align:start position:0%
you hash them and you hash two blocks at
 

00:10:59.399 --> 00:11:00.590 align:start position:0%
you hash them and you hash two blocks at
a<00:10:59.579><c> time</c>

00:11:00.590 --> 00:11:00.600 align:start position:0%
a time
 

00:11:00.600 --> 00:11:03.650 align:start position:0%
a time
this<00:11:01.140><c> is</c><00:11:01.260><c> fairly</c><00:11:01.680><c> fairly</c><00:11:02.040><c> inefficient</c>

00:11:03.650 --> 00:11:03.660 align:start position:0%
this is fairly fairly inefficient
 

00:11:03.660 --> 00:11:05.389 align:start position:0%
this is fairly fairly inefficient
this<00:11:04.140><c> is</c><00:11:04.200><c> a</c><00:11:04.320><c> goal</c><00:11:04.620><c> implementation</c><00:11:04.980><c> this</c><00:11:05.339><c> is</c>

00:11:05.389 --> 00:11:05.399 align:start position:0%
this is a goal implementation this is
 

00:11:05.399 --> 00:11:07.130 align:start position:0%
this is a goal implementation this is
also<00:11:05.700><c> Jim's</c><00:11:06.180><c> uh</c><00:11:06.600><c> this</c><00:11:06.899><c> is</c><00:11:06.959><c> James</c>

00:11:07.130 --> 00:11:07.140 align:start position:0%
also Jim's uh this is James
 

00:11:07.140 --> 00:11:08.690 align:start position:0%
also Jim's uh this is James
implementation<00:11:07.680><c> it's</c><00:11:07.980><c> a</c><00:11:08.100><c> production</c><00:11:08.339><c> a</c>

00:11:08.690 --> 00:11:08.700 align:start position:0%
implementation it's a production a
 

00:11:08.700 --> 00:11:10.490 align:start position:0%
implementation it's a production a
production<00:11:08.940><c> implementation</c><00:11:09.540><c> and</c><00:11:10.079><c> then</c><00:11:10.260><c> again</c>

00:11:10.490 --> 00:11:10.500 align:start position:0%
production implementation and then again
 

00:11:10.500 --> 00:11:11.810 align:start position:0%
production implementation and then again
the<00:11:10.800><c> same</c><00:11:10.860><c> thing</c><00:11:10.980><c> is</c><00:11:11.160><c> slightly</c><00:11:11.640><c> more</c>

00:11:11.810 --> 00:11:11.820 align:start position:0%
the same thing is slightly more
 

00:11:11.820 --> 00:11:12.949 align:start position:0%
the same thing is slightly more
complicated<00:11:12.180><c> because</c><00:11:12.420><c> it</c><00:11:12.600><c> takes</c><00:11:12.779><c> into</c>

00:11:12.949 --> 00:11:12.959 align:start position:0%
complicated because it takes into
 

00:11:12.959 --> 00:11:14.810 align:start position:0%
complicated because it takes into
account<00:11:13.140><c> other</c><00:11:13.440><c> things</c><00:11:13.680><c> but</c><00:11:14.160><c> the</c><00:11:14.339><c> highlighted</c>

00:11:14.810 --> 00:11:14.820 align:start position:0%
account other things but the highlighted
 

00:11:14.820 --> 00:11:16.430 align:start position:0%
account other things but the highlighted
line<00:11:15.000><c> is</c><00:11:15.240><c> the</c><00:11:15.420><c> point</c><00:11:15.540><c> is</c><00:11:15.899><c> the</c><00:11:16.079><c> point</c><00:11:16.200><c> where</c>

00:11:16.430 --> 00:11:16.440 align:start position:0%
line is the point is the point where
 

00:11:16.440 --> 00:11:19.430 align:start position:0%
line is the point is the point where
you're<00:11:16.560><c> hashing</c><00:11:17.040><c> and</c><00:11:17.459><c> you</c><00:11:17.640><c> hash</c><00:11:18.000><c> one</c><00:11:18.480><c> node</c><00:11:18.779><c> as</c>

00:11:19.430 --> 00:11:19.440 align:start position:0%
you're hashing and you hash one node as
 

00:11:19.440 --> 00:11:22.009 align:start position:0%
you're hashing and you hash one node as
the<00:11:19.860><c> hash</c><00:11:19.980><c> of</c><00:11:20.399><c> the</c><00:11:20.640><c> two</c><00:11:20.880><c> children</c><00:11:21.120><c> and</c><00:11:21.660><c> you</c><00:11:21.839><c> do</c>

00:11:22.009 --> 00:11:22.019 align:start position:0%
the hash of the two children and you do
 

00:11:22.019 --> 00:11:24.470 align:start position:0%
the hash of the two children and you do
this<00:11:22.079><c> on</c><00:11:22.260><c> a</c><00:11:22.380><c> loop</c><00:11:23.100><c> for</c><00:11:23.700><c> each</c><00:11:23.940><c> pair</c><00:11:24.120><c> of</c><00:11:24.300><c> children</c>

00:11:24.470 --> 00:11:24.480 align:start position:0%
this on a loop for each pair of children
 

00:11:24.480 --> 00:11:26.690 align:start position:0%
this on a loop for each pair of children
you<00:11:24.779><c> have</c><00:11:25.019><c> once</c><00:11:25.500><c> you</c><00:11:25.740><c> call</c><00:11:25.860><c> the</c><00:11:26.040><c> hasher</c><00:11:26.459><c> and</c>

00:11:26.690 --> 00:11:26.700 align:start position:0%
you have once you call the hasher and
 

00:11:26.700 --> 00:11:27.949 align:start position:0%
you have once you call the hasher and
you<00:11:26.760><c> get</c><00:11:26.940><c> one</c><00:11:27.120><c> touch</c>

00:11:27.949 --> 00:11:27.959 align:start position:0%
you get one touch
 

00:11:27.959 --> 00:11:30.230 align:start position:0%
you get one touch
okay<00:11:28.440><c> so</c><00:11:28.920><c> I</c><00:11:29.399><c> want</c><00:11:29.519><c> to</c><00:11:29.640><c> tell</c><00:11:29.700><c> you</c><00:11:29.820><c> what</c><00:11:30.000><c> is</c><00:11:30.120><c> the</c>

00:11:30.230 --> 00:11:30.240 align:start position:0%
okay so I want to tell you what is the
 

00:11:30.240 --> 00:11:31.430 align:start position:0%
okay so I want to tell you what is the
right<00:11:30.420><c> way</c>

00:11:31.430 --> 00:11:31.440 align:start position:0%
right way
 

00:11:31.440 --> 00:11:33.470 align:start position:0%
right way
of<00:11:31.860><c> hash</c><00:11:31.980><c> in</c><00:11:32.220><c> a</c><00:11:32.339><c> miracle</c><00:11:32.640><c> tree</c><00:11:32.760><c> and</c><00:11:33.360><c> it's</c>

00:11:33.470 --> 00:11:33.480 align:start position:0%
of hash in a miracle tree and it's
 

00:11:33.480 --> 00:11:35.269 align:start position:0%
of hash in a miracle tree and it's
fairly<00:11:33.899><c> fairly</c><00:11:34.200><c> simple</c><00:11:34.320><c> so</c><00:11:34.620><c> there's</c><00:11:34.860><c> two</c>

00:11:35.269 --> 00:11:35.279 align:start position:0%
fairly fairly simple so there's two
 

00:11:35.279 --> 00:11:37.490 align:start position:0%
fairly fairly simple so there's two
things<00:11:35.519><c> that</c><00:11:36.060><c> we</c><00:11:36.420><c> want</c><00:11:36.540><c> to</c><00:11:36.660><c> exploit</c><00:11:37.019><c> we</c><00:11:37.320><c> want</c>

00:11:37.490 --> 00:11:37.500 align:start position:0%
things that we want to exploit we want
 

00:11:37.500 --> 00:11:40.610 align:start position:0%
things that we want to exploit we want
to<00:11:37.560><c> exploit</c><00:11:37.980><c> the</c><00:11:38.100><c> fact</c><00:11:38.220><c> that</c><00:11:38.640><c> our</c><00:11:39.420><c> hash</c><00:11:40.019><c> is</c>

00:11:40.610 --> 00:11:40.620 align:start position:0%
to exploit the fact that our hash is
 

00:11:40.620 --> 00:11:43.130 align:start position:0%
to exploit the fact that our hash is
exactly<00:11:41.040><c> 64</c><00:11:41.579><c> bytes</c><00:11:42.060><c> that's</c><00:11:42.660><c> the</c><00:11:42.899><c> thing</c><00:11:43.019><c> that</c>

00:11:43.130 --> 00:11:43.140 align:start position:0%
exactly 64 bytes that's the thing that
 

00:11:43.140 --> 00:11:44.449 align:start position:0%
exactly 64 bytes that's the thing that
we<00:11:43.260><c> want</c><00:11:43.380><c> to</c><00:11:43.500><c> hatch</c>

00:11:44.449 --> 00:11:44.459 align:start position:0%
we want to hatch
 

00:11:44.459 --> 00:11:47.210 align:start position:0%
we want to hatch
so<00:11:44.940><c> remember</c><00:11:45.240><c> how</c><00:11:45.779><c> is</c><00:11:45.899><c> it</c><00:11:46.079><c> that</c><00:11:46.320><c> we</c>

00:11:47.210 --> 00:11:47.220 align:start position:0%
so remember how is it that we
 

00:11:47.220 --> 00:11:50.090 align:start position:0%
so remember how is it that we
patted<00:11:48.000><c> our</c><00:11:48.240><c> message</c><00:11:48.480><c> into</c><00:11:48.959><c> a</c><00:11:49.260><c> multiple</c><00:11:49.620><c> of</c><00:11:49.740><c> 64</c>

00:11:50.090 --> 00:11:50.100 align:start position:0%
patted our message into a multiple of 64
 

00:11:50.100 --> 00:11:52.790 align:start position:0%
patted our message into a multiple of 64
bytes<00:11:51.000><c> well</c><00:11:51.480><c> our</c><00:11:51.720><c> message</c><00:11:51.899><c> is</c><00:11:52.140><c> already</c><00:11:52.320><c> 64</c>

00:11:52.790 --> 00:11:52.800 align:start position:0%
bytes well our message is already 64
 

00:11:52.800 --> 00:11:55.550 align:start position:0%
bytes well our message is already 64
bytes<00:11:53.220><c> but</c><00:11:53.820><c> unfortunately</c><00:11:54.300><c> unfortunately</c><00:11:55.200><c> we</c>

00:11:55.550 --> 00:11:55.560 align:start position:0%
bytes but unfortunately unfortunately we
 

00:11:55.560 --> 00:11:58.250 align:start position:0%
bytes but unfortunately unfortunately we
need<00:11:55.740><c> to</c><00:11:55.860><c> add</c><00:11:56.100><c> one</c><00:11:56.579><c> bit</c><00:11:56.760><c> to</c><00:11:57.360><c> tell</c><00:11:57.540><c> the</c><00:11:58.140><c> message</c>

00:11:58.250 --> 00:11:58.260 align:start position:0%
need to add one bit to tell the message
 

00:11:58.260 --> 00:12:01.430 align:start position:0%
need to add one bit to tell the message
I<00:11:58.560><c> send</c><00:11:58.740><c> it</c><00:11:59.399><c> so</c><00:11:59.880><c> that's</c><00:12:00.000><c> the</c><00:12:00.240><c> first</c><00:12:00.420><c> bit</c><00:12:00.600><c> there</c>

00:12:01.430 --> 00:12:01.440 align:start position:0%
I send it so that's the first bit there
 

00:12:01.440 --> 00:12:03.170 align:start position:0%
I send it so that's the first bit there
the<00:12:01.920><c> problem</c><00:12:02.040><c> is</c><00:12:02.279><c> that</c><00:12:02.459><c> since</c><00:12:02.640><c> we</c><00:12:02.820><c> added</c><00:12:03.120><c> that</c>

00:12:03.170 --> 00:12:03.180 align:start position:0%
the problem is that since we added that
 

00:12:03.180 --> 00:12:05.269 align:start position:0%
the problem is that since we added that
bit<00:12:03.360><c> now</c><00:12:03.720><c> we</c><00:12:03.899><c> need</c><00:12:04.019><c> an</c><00:12:04.200><c> entire</c><00:12:04.440><c> block</c>

00:12:05.269 --> 00:12:05.279 align:start position:0%
bit now we need an entire block
 

00:12:05.279 --> 00:12:07.670 align:start position:0%
bit now we need an entire block
and<00:12:05.700><c> the</c><00:12:05.880><c> entire</c><00:12:06.120><c> block</c><00:12:06.360><c> is</c><00:12:06.779><c> all</c><00:12:07.079><c> made</c><00:12:07.500><c> of</c>

00:12:07.670 --> 00:12:07.680 align:start position:0%
and the entire block is all made of
 

00:12:07.680 --> 00:12:10.850 align:start position:0%
and the entire block is all made of
zeros<00:12:08.100><c> except</c><00:12:09.060><c> this</c><00:12:09.720><c> little</c><00:12:09.959><c> bit</c><00:12:10.200><c> one</c><00:12:10.500><c> here</c>

00:12:10.850 --> 00:12:10.860 align:start position:0%
zeros except this little bit one here
 

00:12:10.860 --> 00:12:13.310 align:start position:0%
zeros except this little bit one here
and<00:12:11.339><c> that</c><00:12:11.519><c> bit</c><00:12:11.640><c> one</c><00:12:11.880><c> here</c><00:12:12.240><c> is</c><00:12:12.420><c> saying</c><00:12:12.839><c> the</c>

00:12:13.310 --> 00:12:13.320 align:start position:0%
and that bit one here is saying the
 

00:12:13.320 --> 00:12:15.710 align:start position:0%
and that bit one here is saying the
message<00:12:13.500><c> was</c><00:12:13.860><c> 64</c><00:12:14.399><c> bytes</c>

00:12:15.710 --> 00:12:15.720 align:start position:0%
message was 64 bytes
 

00:12:15.720 --> 00:12:18.889 align:start position:0%
message was 64 bytes
so<00:12:16.079><c> that</c><00:12:16.440><c> bit</c><00:12:16.560><c> there</c><00:12:16.800><c> is</c><00:12:16.980><c> a</c><00:12:17.160><c> 512</c><00:12:17.880><c> bits</c>

00:12:18.889 --> 00:12:18.899 align:start position:0%
so that bit there is a 512 bits
 

00:12:18.899 --> 00:12:21.470 align:start position:0%
so that bit there is a 512 bits
that<00:12:19.500><c> uh</c><00:12:19.740><c> that</c><00:12:19.920><c> the</c><00:12:20.100><c> message</c><00:12:20.220><c> was</c>

00:12:21.470 --> 00:12:21.480 align:start position:0%
that uh that the message was
 

00:12:21.480 --> 00:12:23.210 align:start position:0%
that uh that the message was
but<00:12:21.779><c> the</c><00:12:22.019><c> point</c><00:12:22.140><c> is</c><00:12:22.320><c> that</c><00:12:22.560><c> this</c><00:12:22.740><c> block</c><00:12:22.920><c> is</c>

00:12:23.210 --> 00:12:23.220 align:start position:0%
but the point is that this block is
 

00:12:23.220 --> 00:12:25.009 align:start position:0%
but the point is that this block is
known<00:12:23.519><c> it's</c><00:12:23.880><c> known</c><00:12:24.180><c> before</c><00:12:24.420><c> we</c><00:12:24.660><c> started</c>

00:12:25.009 --> 00:12:25.019 align:start position:0%
known it's known before we started
 

00:12:25.019 --> 00:12:28.310 align:start position:0%
known it's known before we started
hashing<00:12:25.740><c> the</c><00:12:26.339><c> whole</c><00:12:26.459><c> block</c><00:12:26.700><c> is</c><00:12:26.940><c> known</c><00:12:27.120><c> and</c><00:12:28.079><c> in</c>

00:12:28.310 --> 00:12:28.320 align:start position:0%
hashing the whole block is known and in
 

00:12:28.320 --> 00:12:31.069 align:start position:0%
hashing the whole block is known and in
order<00:12:28.440><c> to</c><00:12:28.620><c> compute</c><00:12:29.040><c> the</c><00:12:29.220><c> scheduled</c><00:12:29.700><c> words</c><00:12:30.079><c> we</c>

00:12:31.069 --> 00:12:31.079 align:start position:0%
order to compute the scheduled words we
 

00:12:31.079 --> 00:12:32.630 align:start position:0%
order to compute the scheduled words we
only<00:12:31.200><c> need</c><00:12:31.440><c> to</c><00:12:31.500><c> know</c><00:12:31.680><c> the</c><00:12:31.860><c> message</c><00:12:32.040><c> we</c><00:12:32.519><c> don't</c>

00:12:32.630 --> 00:12:32.640 align:start position:0%
only need to know the message we don't
 

00:12:32.640 --> 00:12:34.490 align:start position:0%
only need to know the message we don't
need<00:12:32.760><c> to</c><00:12:32.940><c> know</c><00:12:33.060><c> the</c><00:12:33.300><c> hash</c><00:12:33.540><c> of</c><00:12:34.200><c> the</c><00:12:34.320><c> previous</c>

00:12:34.490 --> 00:12:34.500 align:start position:0%
need to know the hash of the previous
 

00:12:34.500 --> 00:12:38.690 align:start position:0%
need to know the hash of the previous
block<00:12:35.339><c> so</c><00:12:36.060><c> whenever</c><00:12:36.600><c> we</c><00:12:36.839><c> hash</c><00:12:37.079><c> 64</c><00:12:37.680><c> bytes</c><00:12:38.160><c> we</c>

00:12:38.690 --> 00:12:38.700 align:start position:0%
block so whenever we hash 64 bytes we
 

00:12:38.700 --> 00:12:42.230 align:start position:0%
block so whenever we hash 64 bytes we
can<00:12:38.959><c> already</c><00:12:39.959><c> compute</c><00:12:40.680><c> the</c><00:12:41.579><c> scheduled</c><00:12:42.060><c> words</c>

00:12:42.230 --> 00:12:42.240 align:start position:0%
can already compute the scheduled words
 

00:12:42.240 --> 00:12:44.210 align:start position:0%
can already compute the scheduled words
for<00:12:42.600><c> this</c><00:12:42.779><c> entire</c><00:12:43.019><c> block</c><00:12:43.260><c> and</c><00:12:43.680><c> we</c><00:12:43.800><c> can</c><00:12:43.920><c> do</c><00:12:44.040><c> this</c>

00:12:44.210 --> 00:12:44.220 align:start position:0%
for this entire block and we can do this
 

00:12:44.220 --> 00:12:46.550 align:start position:0%
for this entire block and we can do this
now<00:12:44.459><c> we</c><00:12:44.940><c> have</c><00:12:45.060><c> them</c><00:12:45.300><c> so</c><00:12:45.600><c> we</c><00:12:45.779><c> can</c><00:12:45.959><c> cardboard</c><00:12:46.320><c> it</c>

00:12:46.550 --> 00:12:46.560 align:start position:0%
now we have them so we can cardboard it
 

00:12:46.560 --> 00:12:49.430 align:start position:0%
now we have them so we can cardboard it
in<00:12:46.740><c> the</c><00:12:46.920><c> in</c><00:12:47.399><c> the</c><00:12:47.579><c> in</c><00:12:47.820><c> the</c><00:12:48.000><c> hasher</c><00:12:48.360><c> itself</c><00:12:49.079><c> this</c>

00:12:49.430 --> 00:12:49.440 align:start position:0%
in the in the in the hasher itself this
 

00:12:49.440 --> 00:12:50.690 align:start position:0%
in the in the in the hasher itself this
is<00:12:49.560><c> something</c><00:12:49.680><c> that</c><00:12:49.920><c> the</c><00:12:50.100><c> Bitcoin</c><00:12:50.519><c> Community</c>

00:12:50.690 --> 00:12:50.700 align:start position:0%
is something that the Bitcoin Community
 

00:12:50.700 --> 00:12:52.850 align:start position:0%
is something that the Bitcoin Community
learned<00:12:51.360><c> and</c><00:12:51.959><c> they</c><00:12:52.139><c> have</c><00:12:52.260><c> it</c><00:12:52.440><c> in</c><00:12:52.620><c> their</c>

00:12:52.850 --> 00:12:52.860 align:start position:0%
learned and they have it in their
 

00:12:52.860 --> 00:12:56.030 align:start position:0%
learned and they have it in their
standard<00:12:53.639><c> node</c><00:12:54.240><c> so</c><00:12:54.779><c> the</c><00:12:55.079><c> the</c>

00:12:56.030 --> 00:12:56.040 align:start position:0%
standard node so the the
 

00:12:56.040 --> 00:12:57.290 align:start position:0%
standard node so the the
I<00:12:56.279><c> don't</c><00:12:56.399><c> know</c><00:12:56.519><c> how</c><00:12:56.579><c> is</c><00:12:56.700><c> it</c><00:12:56.820><c> called</c><00:12:56.940><c> I</c><00:12:57.180><c> think</c>

00:12:57.290 --> 00:12:57.300 align:start position:0%
I don't know how is it called I think
 

00:12:57.300 --> 00:12:59.509 align:start position:0%
I don't know how is it called I think
it's<00:12:57.360><c> Bitcoin</c><00:12:57.839><c> core</c><00:12:58.019><c> the</c><00:12:58.320><c> client</c><00:12:58.620><c> and</c><00:12:59.220><c> it</c><00:12:59.339><c> has</c>

00:12:59.509 --> 00:12:59.519 align:start position:0%
it's Bitcoin core the client and it has
 

00:12:59.519 --> 00:13:02.389 align:start position:0%
it's Bitcoin core the client and it has
it<00:12:59.639><c> there</c><00:12:59.820><c> and</c><00:13:00.540><c> no</c><00:13:00.899><c> no</c><00:13:01.200><c> ethereum</c><00:13:01.740><c> client</c><00:13:02.040><c> used</c>

00:13:02.389 --> 00:13:02.399 align:start position:0%
it there and no no ethereum client used
 

00:13:02.399 --> 00:13:04.250 align:start position:0%
it there and no no ethereum client used
this<00:13:02.700><c> so</c><00:13:03.240><c> I</c><00:13:03.420><c> was</c><00:13:03.540><c> surprised</c><00:13:03.839><c> when</c><00:13:03.959><c> I</c><00:13:04.079><c> found</c>

00:13:04.250 --> 00:13:04.260 align:start position:0%
this so I was surprised when I found
 

00:13:04.260 --> 00:13:06.050 align:start position:0%
this so I was surprised when I found
this<00:13:04.440><c> out</c><00:13:04.620><c> so</c><00:13:04.920><c> we</c><00:13:05.100><c> can</c><00:13:05.220><c> stop</c><00:13:05.399><c> we</c><00:13:05.760><c> can</c><00:13:05.820><c> steal</c>

00:13:06.050 --> 00:13:06.060 align:start position:0%
this out so we can stop we can steal
 

00:13:06.060 --> 00:13:07.790 align:start position:0%
this out so we can stop we can steal
this<00:13:06.180><c> from</c><00:13:06.300><c> the</c><00:13:06.420><c> Bitcoin</c><00:13:06.899><c> community</c><00:13:07.019><c> and</c>

00:13:07.790 --> 00:13:07.800 align:start position:0%
this from the Bitcoin community and
 

00:13:07.800 --> 00:13:10.310 align:start position:0%
this from the Bitcoin community and
indeed<00:13:08.220><c> uh</c><00:13:08.940><c> so</c><00:13:09.060><c> prism</c><00:13:09.480><c> uses</c><00:13:09.959><c> this</c><00:13:10.139><c> Library</c>

00:13:10.310 --> 00:13:10.320 align:start position:0%
indeed uh so prism uses this Library
 

00:13:10.320 --> 00:13:12.290 align:start position:0%
indeed uh so prism uses this Library
loads<00:13:11.220><c> that</c><00:13:11.339><c> are</c><00:13:11.459><c> all</c><00:13:11.579><c> to</c><00:13:11.760><c> implemented</c><00:13:12.180><c> this</c>

00:13:12.290 --> 00:13:12.300 align:start position:0%
loads that are all to implemented this
 

00:13:12.300 --> 00:13:14.329 align:start position:0%
loads that are all to implemented this
and<00:13:12.540><c> just</c><00:13:12.660><c> by</c><00:13:12.839><c> implementing</c><00:13:13.320><c> this</c><00:13:13.440><c> you</c><00:13:13.680><c> get</c><00:13:13.860><c> at</c>

00:13:14.329 --> 00:13:14.339 align:start position:0%
and just by implementing this you get at
 

00:13:14.339 --> 00:13:17.930 align:start position:0%
and just by implementing this you get at
least<00:13:14.459><c> 20</c><00:13:14.639><c> gain</c><00:13:15.420><c> on</c><00:13:16.019><c> your</c><00:13:16.139><c> hashing</c><00:13:16.560><c> speed</c><00:13:17.100><c> just</c>

00:13:17.930 --> 00:13:17.940 align:start position:0%
least 20 gain on your hashing speed just
 

00:13:17.940 --> 00:13:20.389 align:start position:0%
least 20 gain on your hashing speed just
this<00:13:18.120><c> no</c><00:13:18.600><c> changes</c><00:13:18.959><c> on</c><00:13:19.139><c> your</c><00:13:19.260><c> code</c><00:13:19.440><c> just</c>

00:13:20.389 --> 00:13:20.399 align:start position:0%
this no changes on your code just
 

00:13:20.399 --> 00:13:23.990 align:start position:0%
this no changes on your code just
include<00:13:21.120><c> this</c><00:13:21.600><c> uh</c><00:13:22.320><c> hardcode</c><00:13:22.740><c> words</c>

00:13:23.990 --> 00:13:24.000 align:start position:0%
include this uh hardcode words
 

00:13:24.000 --> 00:13:26.449 align:start position:0%
include this uh hardcode words
the<00:13:24.540><c> second</c><00:13:24.660><c> one</c><00:13:24.839><c> is</c><00:13:25.079><c> vectorization</c><00:13:25.560><c> itself</c>

00:13:26.449 --> 00:13:26.459 align:start position:0%
the second one is vectorization itself
 

00:13:26.459 --> 00:13:28.190 align:start position:0%
the second one is vectorization itself
and<00:13:26.940><c> vectorization</c>

00:13:28.190 --> 00:13:28.200 align:start position:0%
and vectorization
 

00:13:28.200 --> 00:13:29.629 align:start position:0%
and vectorization
uh

00:13:29.629 --> 00:13:29.639 align:start position:0%
uh
 

00:13:29.639 --> 00:13:31.009 align:start position:0%
uh
this<00:13:30.120><c> is</c><00:13:30.180><c> also</c><00:13:30.480><c> something</c><00:13:30.660><c> that</c><00:13:30.899><c> is</c>

00:13:31.009 --> 00:13:31.019 align:start position:0%
this is also something that is
 

00:13:31.019 --> 00:13:33.650 align:start position:0%
this is also something that is
implemented<00:13:31.560><c> already</c><00:13:32.160><c> if</c><00:13:32.639><c> you</c><00:13:32.880><c> have</c><00:13:33.060><c> several</c>

00:13:33.650 --> 00:13:33.660 align:start position:0%
implemented already if you have several
 

00:13:33.660 --> 00:13:35.870 align:start position:0%
implemented already if you have several
messages<00:13:34.079><c> that</c><00:13:34.620><c> you</c><00:13:34.740><c> need</c><00:13:34.860><c> to</c><00:13:34.980><c> Hash</c><00:13:35.160><c> at</c><00:13:35.760><c> the</c>

00:13:35.870 --> 00:13:35.880 align:start position:0%
messages that you need to Hash at the
 

00:13:35.880 --> 00:13:37.610 align:start position:0%
messages that you need to Hash at the
same<00:13:36.000><c> time</c><00:13:36.180><c> there</c><00:13:36.480><c> are</c><00:13:36.660><c> libraries</c><00:13:37.019><c> to</c><00:13:37.260><c> do</c><00:13:37.440><c> this</c>

00:13:37.610 --> 00:13:37.620 align:start position:0%
same time there are libraries to do this
 

00:13:37.620 --> 00:13:40.490 align:start position:0%
same time there are libraries to do this
Intel<00:13:38.399><c> has</c><00:13:38.579><c> a</c><00:13:38.760><c> very</c><00:13:38.880><c> good</c><00:13:39.000><c> library</c><00:13:39.180><c> and</c><00:13:40.079><c> all</c><00:13:40.260><c> I</c>

00:13:40.490 --> 00:13:40.500 align:start position:0%
Intel has a very good library and all I
 

00:13:40.500 --> 00:13:43.009 align:start position:0%
Intel has a very good library and all I
need<00:13:40.620><c> is</c><00:13:40.860><c> just</c><00:13:41.160><c> change</c><00:13:41.579><c> the</c><00:13:42.300><c> signature</c><00:13:42.839><c> of</c>

00:13:43.009 --> 00:13:43.019 align:start position:0%
need is just change the signature of
 

00:13:43.019 --> 00:13:44.750 align:start position:0%
need is just change the signature of
that<00:13:43.200><c> library</c><00:13:43.440><c> but</c><00:13:44.160><c> the</c><00:13:44.279><c> point</c><00:13:44.399><c> is</c><00:13:44.519><c> that</c><00:13:44.639><c> you</c>

00:13:44.750 --> 00:13:44.760 align:start position:0%
that library but the point is that you
 

00:13:44.760 --> 00:13:46.730 align:start position:0%
that library but the point is that you
can<00:13:45.180><c> be</c><00:13:45.300><c> hashing</c><00:13:45.720><c> several</c><00:13:46.019><c> buffers</c><00:13:46.380><c> at</c><00:13:46.620><c> the</c>

00:13:46.730 --> 00:13:46.740 align:start position:0%
can be hashing several buffers at the
 

00:13:46.740 --> 00:13:49.370 align:start position:0%
can be hashing several buffers at the
same<00:13:46.860><c> time</c><00:13:47.040><c> if</c><00:13:47.820><c> you</c><00:13:48.000><c> have</c><00:13:48.180><c> so</c><00:13:48.839><c> this</c><00:13:49.019><c> is</c><00:13:49.079><c> a</c><00:13:49.260><c> way</c>

00:13:49.370 --> 00:13:49.380 align:start position:0%
same time if you have so this is a way
 

00:13:49.380 --> 00:13:52.090 align:start position:0%
same time if you have so this is a way
of<00:13:49.560><c> like</c><00:13:49.740><c> encoding</c><00:13:50.339><c> the</c><00:13:50.700><c> words</c><00:13:50.940><c> again</c>

00:13:52.090 --> 00:13:52.100 align:start position:0%
of like encoding the words again
 

00:13:52.100 --> 00:13:54.410 align:start position:0%
of like encoding the words again
uh<00:13:53.100><c> you're</c><00:13:53.399><c> gonna</c><00:13:53.519><c> take</c><00:13:53.760><c> this</c><00:13:54.000><c> is</c><00:13:54.120><c> the</c><00:13:54.240><c> message</c>

00:13:54.410 --> 00:13:54.420 align:start position:0%
uh you're gonna take this is the message
 

00:13:54.420 --> 00:13:56.750 align:start position:0%
uh you're gonna take this is the message
that<00:13:54.779><c> you</c><00:13:54.899><c> want</c><00:13:55.019><c> to</c><00:13:55.200><c> you</c><00:13:55.380><c> want</c><00:13:55.560><c> to</c><00:13:55.680><c> hash</c>

00:13:56.750 --> 00:13:56.760 align:start position:0%
that you want to you want to hash
 

00:13:56.760 --> 00:13:58.730 align:start position:0%
that you want to you want to hash
uh<00:13:57.480><c> so</c><00:13:57.660><c> these</c><00:13:57.959><c> are</c><00:13:58.079><c> the</c><00:13:58.139><c> 16</c><00:13:58.320><c> words</c>

00:13:58.730 --> 00:13:58.740 align:start position:0%
uh so these are the 16 words
 

00:13:58.740 --> 00:14:01.009 align:start position:0%
uh so these are the 16 words
corresponding<00:13:59.639><c> to</c><00:13:59.820><c> this</c><00:14:00.060><c> node</c><00:14:00.360><c> here</c><00:14:00.660><c> the</c>

00:14:01.009 --> 00:14:01.019 align:start position:0%
corresponding to this node here the
 

00:14:01.019 --> 00:14:03.170 align:start position:0%
corresponding to this node here the
zeroth<00:14:01.380><c> note</c><00:14:01.560><c> then</c><00:14:02.339><c> you're</c><00:14:02.459><c> gonna</c><00:14:02.639><c> have</c><00:14:02.880><c> 16</c>

00:14:03.170 --> 00:14:03.180 align:start position:0%
zeroth note then you're gonna have 16
 

00:14:03.180 --> 00:14:05.090 align:start position:0%
zeroth note then you're gonna have 16
words<00:14:03.540><c> corresponding</c><00:14:04.260><c> to</c><00:14:04.380><c> this</c><00:14:04.560><c> one</c><00:14:04.740><c> that</c><00:14:05.040><c> you</c>

00:14:05.090 --> 00:14:05.100 align:start position:0%
words corresponding to this one that you
 

00:14:05.100 --> 00:14:07.430 align:start position:0%
words corresponding to this one that you
want<00:14:05.220><c> to</c><00:14:05.339><c> Hash</c><00:14:05.579><c> 16</c><00:14:06.060><c> words</c><00:14:06.360><c> for</c><00:14:06.779><c> these</c><00:14:07.079><c> two</c><00:14:07.139><c> and</c>

00:14:07.430 --> 00:14:07.440 align:start position:0%
want to Hash 16 words for these two and
 

00:14:07.440 --> 00:14:09.110 align:start position:0%
want to Hash 16 words for these two and
16<00:14:07.680><c> words</c><00:14:07.980><c> for</c><00:14:08.220><c> these</c><00:14:08.459><c> two</c>

00:14:09.110 --> 00:14:09.120 align:start position:0%
16 words for these two
 

00:14:09.120 --> 00:14:10.970 align:start position:0%
16 words for these two
and<00:14:09.660><c> what</c><00:14:09.899><c> you're</c><00:14:10.019><c> going</c><00:14:10.139><c> to</c><00:14:10.260><c> do</c><00:14:10.380><c> is</c><00:14:10.560><c> collect</c>

00:14:10.970 --> 00:14:10.980 align:start position:0%
and what you're going to do is collect
 

00:14:10.980 --> 00:14:13.910 align:start position:0%
and what you're going to do is collect
the<00:14:11.579><c> first</c><00:14:11.700><c> double</c><00:14:11.940><c> word</c><00:14:12.240><c> from</c><00:14:12.600><c> this</c><00:14:12.839><c> one</c><00:14:13.019><c> the</c>

00:14:13.910 --> 00:14:13.920 align:start position:0%
the first double word from this one the
 

00:14:13.920 --> 00:14:15.590 align:start position:0%
the first double word from this one the
first<00:14:14.040><c> double</c><00:14:14.220><c> word</c><00:14:14.519><c> from</c><00:14:14.760><c> this</c><00:14:15.060><c> one</c><00:14:15.180><c> the</c>

00:14:15.590 --> 00:14:15.600 align:start position:0%
first double word from this one the
 

00:14:15.600 --> 00:14:16.970 align:start position:0%
first double word from this one the
first<00:14:15.720><c> one</c><00:14:15.899><c> will</c><00:14:16.139><c> work</c><00:14:16.320><c> from</c><00:14:16.500><c> this</c><00:14:16.680><c> one</c><00:14:16.800><c> and</c>

00:14:16.970 --> 00:14:16.980 align:start position:0%
first one will work from this one and
 

00:14:16.980 --> 00:14:18.889 align:start position:0%
first one will work from this one and
the<00:14:17.100><c> first</c><00:14:17.220><c> double</c><00:14:17.339><c> word</c><00:14:17.639><c> from</c><00:14:17.880><c> this</c><00:14:18.060><c> one</c><00:14:18.240><c> into</c>

00:14:18.889 --> 00:14:18.899 align:start position:0%
the first double word from this one into
 

00:14:18.899 --> 00:14:20.210 align:start position:0%
the first double word from this one into
one<00:14:19.200><c> register</c>

00:14:20.210 --> 00:14:20.220 align:start position:0%
one register
 

00:14:20.220 --> 00:14:21.949 align:start position:0%
one register
that's<00:14:20.639><c> if</c><00:14:20.820><c> you</c><00:14:20.940><c> have</c><00:14:21.120><c> registers</c><00:14:21.600><c> that</c><00:14:21.839><c> are</c>

00:14:21.949 --> 00:14:21.959 align:start position:0%
that's if you have registers that are
 

00:14:21.959 --> 00:14:25.310 align:start position:0%
that's if you have registers that are
128<00:14:22.800><c> bits</c><00:14:23.279><c> if</c><00:14:23.820><c> you</c><00:14:23.940><c> had</c><00:14:24.120><c> avx12</c><00:14:24.959><c> you</c><00:14:25.200><c> would</c>

00:14:25.310 --> 00:14:25.320 align:start position:0%
128 bits if you had avx12 you would
 

00:14:25.320 --> 00:14:27.769 align:start position:0%
128 bits if you had avx12 you would
collect<00:14:25.620><c> eight</c><00:14:26.160><c> of</c><00:14:26.459><c> them</c><00:14:26.579><c> at</c><00:14:26.760><c> the</c><00:14:26.880><c> same</c><00:14:27.000><c> time</c>

00:14:27.769 --> 00:14:27.779 align:start position:0%
collect eight of them at the same time
 

00:14:27.779 --> 00:14:31.490 align:start position:0%
collect eight of them at the same time
and<00:14:28.200><c> again</c><00:14:28.380><c> if</c><00:14:28.680><c> you're</c><00:14:28.860><c> a</c><00:14:29.100><c> AVX</c><00:14:30.000><c> 512</c><00:14:30.959><c> you</c><00:14:31.200><c> can</c><00:14:31.320><c> do</c>

00:14:31.490 --> 00:14:31.500 align:start position:0%
and again if you're a AVX 512 you can do
 

00:14:31.500 --> 00:14:33.110 align:start position:0%
and again if you're a AVX 512 you can do
16<00:14:31.800><c> at</c><00:14:32.220><c> a</c><00:14:32.399><c> time</c>

00:14:33.110 --> 00:14:33.120 align:start position:0%
16 at a time
 

00:14:33.120 --> 00:14:36.530 align:start position:0%
16 at a time
the<00:14:33.600><c> point</c><00:14:33.720><c> is</c><00:14:33.959><c> that</c><00:14:34.320><c> you</c><00:14:34.800><c> can</c><00:14:34.920><c> hash</c><00:14:35.360><c> in</c><00:14:36.360><c> one</c>

00:14:36.530 --> 00:14:36.540 align:start position:0%
the point is that you can hash in one
 

00:14:36.540 --> 00:14:37.490 align:start position:0%
the point is that you can hash in one
pass

00:14:37.490 --> 00:14:37.500 align:start position:0%
pass
 

00:14:37.500 --> 00:14:41.629 align:start position:0%
pass
you<00:14:37.980><c> can</c><00:14:38.100><c> hash</c><00:14:38.399><c> up</c><00:14:39.300><c> to</c><00:14:39.480><c> 16</c><00:14:39.660><c> blocks</c><00:14:40.199><c> on</c><00:14:40.440><c> AVX</c><00:14:40.920><c> 512</c>

00:14:41.629 --> 00:14:41.639 align:start position:0%
you can hash up to 16 blocks on AVX 512
 

00:14:41.639 --> 00:14:43.610 align:start position:0%
you can hash up to 16 blocks on AVX 512
and<00:14:42.240><c> you</c><00:14:42.420><c> could</c><00:14:42.540><c> do</c><00:14:42.660><c> the</c><00:14:42.779><c> same</c><00:14:42.899><c> thing</c><00:14:43.079><c> for</c><00:14:43.380><c> the</c>

00:14:43.610 --> 00:14:43.620 align:start position:0%
and you could do the same thing for the
 

00:14:43.620 --> 00:14:46.310 align:start position:0%
and you could do the same thing for the
words<00:14:43.860><c> themselves</c><00:14:44.459><c> so</c><00:14:45.000><c> the</c><00:14:45.240><c> the</c><00:14:45.420><c> digest</c>

00:14:46.310 --> 00:14:46.320 align:start position:0%
words themselves so the the digest
 

00:14:46.320 --> 00:14:49.189 align:start position:0%
words themselves so the the digest
consists<00:14:47.279><c> of</c><00:14:47.399><c> eight</c><00:14:47.880><c> double</c><00:14:48.180><c> words</c>

00:14:49.189 --> 00:14:49.199 align:start position:0%
consists of eight double words
 

00:14:49.199 --> 00:14:52.370 align:start position:0%
consists of eight double words
if<00:14:49.620><c> you</c><00:14:49.800><c> have</c><00:14:50.100><c> registers</c><00:14:50.820><c> that</c><00:14:51.060><c> are</c><00:14:51.180><c> 128</c><00:14:51.959><c> bits</c>

00:14:52.370 --> 00:14:52.380 align:start position:0%
if you have registers that are 128 bits
 

00:14:52.380 --> 00:14:54.530 align:start position:0%
if you have registers that are 128 bits
you<00:14:52.920><c> can</c><00:14:53.040><c> put</c><00:14:53.339><c> this</c>

00:14:54.530 --> 00:14:54.540 align:start position:0%
you can put this
 

00:14:54.540 --> 00:14:57.110 align:start position:0%
you can put this
you<00:14:55.139><c> can</c><00:14:55.199><c> put</c><00:14:55.440><c> four</c><00:14:55.800><c> of</c><00:14:56.040><c> them</c><00:14:56.220><c> in</c><00:14:56.579><c> one</c><00:14:56.699><c> register</c>

00:14:57.110 --> 00:14:57.120 align:start position:0%
you can put four of them in one register
 

00:14:57.120 --> 00:14:59.930 align:start position:0%
you can put four of them in one register
and<00:14:58.019><c> then</c><00:14:58.199><c> you</c><00:14:58.560><c> use</c><00:14:58.740><c> eight</c><00:14:59.100><c> such</c><00:14:59.399><c> registers</c>

00:14:59.930 --> 00:14:59.940 align:start position:0%
and then you use eight such registers
 

00:14:59.940 --> 00:15:02.269 align:start position:0%
and then you use eight such registers
for<00:15:00.420><c> the</c><00:15:00.600><c> eight</c><00:15:00.720><c> words</c><00:15:01.079><c> of</c><00:15:01.380><c> the</c><00:15:01.500><c> digest</c><00:15:01.860><c> and</c>

00:15:02.269 --> 00:15:02.279 align:start position:0%
for the eight words of the digest and
 

00:15:02.279 --> 00:15:04.310 align:start position:0%
for the eight words of the digest and
you<00:15:02.399><c> can</c><00:15:02.519><c> hash</c><00:15:02.760><c> four</c><00:15:03.060><c> blocks</c><00:15:03.420><c> at</c><00:15:03.600><c> a</c><00:15:03.720><c> time</c><00:15:03.779><c> so</c>

00:15:04.310 --> 00:15:04.320 align:start position:0%
you can hash four blocks at a time so
 

00:15:04.320 --> 00:15:05.930 align:start position:0%
you can hash four blocks at a time so
this<00:15:04.500><c> is</c><00:15:04.620><c> again</c><00:15:04.920><c> this</c><00:15:05.279><c> is</c><00:15:05.339><c> a</c><00:15:05.459><c> library</c><00:15:05.639><c> that</c>

00:15:05.930 --> 00:15:05.940 align:start position:0%
this is again this is a library that
 

00:15:05.940 --> 00:15:07.670 align:start position:0%
this is again this is a library that
exists<00:15:06.300><c> so</c><00:15:06.600><c> all</c><00:15:06.899><c> I'm</c><00:15:07.139><c> selling</c><00:15:07.440><c> you</c><00:15:07.560><c> is</c>

00:15:07.670 --> 00:15:07.680 align:start position:0%
exists so all I'm selling you is
 

00:15:07.680 --> 00:15:09.170 align:start position:0%
exists so all I'm selling you is
something<00:15:07.860><c> that</c><00:15:08.100><c> already</c><00:15:08.279><c> exists</c><00:15:08.820><c> it's</c><00:15:09.000><c> not</c>

00:15:09.170 --> 00:15:09.180 align:start position:0%
something that already exists it's not
 

00:15:09.180 --> 00:15:11.449 align:start position:0%
something that already exists it's not
that<00:15:09.300><c> we're</c><00:15:09.420><c> rolling</c><00:15:09.779><c> out</c><00:15:09.959><c> our</c><00:15:10.560><c> own</c><00:15:10.680><c> crypto</c><00:15:11.160><c> is</c>

00:15:11.449 --> 00:15:11.459 align:start position:0%
that we're rolling out our own crypto is
 

00:15:11.459 --> 00:15:13.490 align:start position:0%
that we're rolling out our own crypto is
I<00:15:12.060><c> need</c><00:15:12.180><c> to</c><00:15:12.300><c> brag</c><00:15:12.540><c> about</c><00:15:12.660><c> something</c><00:15:12.959><c> I</c><00:15:13.260><c> was</c>

00:15:13.490 --> 00:15:13.500 align:start position:0%
I need to brag about something I was
 

00:15:13.500 --> 00:15:15.710 align:start position:0%
I need to brag about something I was
told<00:15:13.680><c> as</c><00:15:13.920><c> a</c><00:15:14.100><c> student</c><00:15:14.220><c> that</c><00:15:14.579><c> if</c><00:15:15.240><c> you're</c><00:15:15.360><c> given</c><00:15:15.600><c> a</c>

00:15:15.710 --> 00:15:15.720 align:start position:0%
told as a student that if you're given a
 

00:15:15.720 --> 00:15:16.790 align:start position:0%
told as a student that if you're given a
talk<00:15:15.779><c> you</c><00:15:16.019><c> need</c><00:15:16.139><c> to</c><00:15:16.199><c> brag</c><00:15:16.440><c> about</c><00:15:16.560><c> something</c>

00:15:16.790 --> 00:15:16.800 align:start position:0%
talk you need to brag about something
 

00:15:16.800 --> 00:15:18.110 align:start position:0%
talk you need to brag about something
that<00:15:17.040><c> you</c><00:15:17.160><c> did</c><00:15:17.279><c> yourself</c>

00:15:18.110 --> 00:15:18.120 align:start position:0%
that you did yourself
 

00:15:18.120 --> 00:15:20.750 align:start position:0%
that you did yourself
and<00:15:18.660><c> I</c><00:15:18.899><c> guess</c><00:15:18.959><c> this</c><00:15:19.260><c> is</c><00:15:19.320><c> something</c><00:15:19.500><c> I</c><00:15:19.800><c> did</c><00:15:19.980><c> uh</c>

00:15:20.750 --> 00:15:20.760 align:start position:0%
and I guess this is something I did uh
 

00:15:20.760 --> 00:15:23.449 align:start position:0%
and I guess this is something I did uh
of<00:15:21.180><c> course</c><00:15:21.300><c> the</c><00:15:21.540><c> the</c><00:15:21.800><c> assembly</c><00:15:22.800><c> for</c><00:15:22.980><c> Intel</c><00:15:23.279><c> and</c>

00:15:23.449 --> 00:15:23.459 align:start position:0%
of course the the assembly for Intel and
 

00:15:23.459 --> 00:15:26.030 align:start position:0%
of course the the assembly for Intel and
AMD<00:15:23.940><c> Intel's</c><00:15:24.720><c> libraries</c><00:15:25.139><c> I'm</c><00:15:25.620><c> not</c><00:15:25.740><c> gonna</c><00:15:25.800><c> beat</c>

00:15:26.030 --> 00:15:26.040 align:start position:0%
AMD Intel's libraries I'm not gonna beat
 

00:15:26.040 --> 00:15:29.509 align:start position:0%
AMD Intel's libraries I'm not gonna beat
it<00:15:26.579><c> uh</c><00:15:27.480><c> unfortunately</c><00:15:28.019><c> Intel</c><00:15:28.800><c> or</c><00:15:29.100><c> reasonably</c>

00:15:29.509 --> 00:15:29.519 align:start position:0%
it uh unfortunately Intel or reasonably
 

00:15:29.519 --> 00:15:32.930 align:start position:0%
it uh unfortunately Intel or reasonably
Intel<00:15:30.060><c> does</c><00:15:30.480><c> not</c><00:15:30.720><c> produce</c><00:15:31.079><c> assembly</c><00:15:31.620><c> for</c><00:15:31.800><c> arm</c>

00:15:32.930 --> 00:15:32.940 align:start position:0%
Intel does not produce assembly for arm
 

00:15:32.940 --> 00:15:34.449 align:start position:0%
Intel does not produce assembly for arm
and<00:15:33.240><c> there's</c><00:15:33.360><c> something</c><00:15:33.540><c> interesting</c><00:15:34.019><c> here</c>

00:15:34.449 --> 00:15:34.459 align:start position:0%
and there's something interesting here
 

00:15:34.459 --> 00:15:37.730 align:start position:0%
and there's something interesting here
uh<00:15:35.459><c> arm</c><00:15:35.699><c> assembly</c><00:15:36.300><c> I</c><00:15:36.720><c> told</c><00:15:36.839><c> you</c><00:15:37.019><c> that</c><00:15:37.260><c> every</c>

00:15:37.730 --> 00:15:37.740 align:start position:0%
uh arm assembly I told you that every
 

00:15:37.740 --> 00:15:39.889 align:start position:0%
uh arm assembly I told you that every
Library<00:15:38.100><c> out</c><00:15:38.519><c> there</c><00:15:38.699><c> uses</c><00:15:39.120><c> vectorization</c><00:15:39.600><c> to</c>

00:15:39.889 --> 00:15:39.899 align:start position:0%
Library out there uses vectorization to
 

00:15:39.899 --> 00:15:41.810 align:start position:0%
Library out there uses vectorization to
compute<00:15:40.199><c> the</c><00:15:40.320><c> scheduled</c><00:15:40.680><c> words</c><00:15:40.800><c> that's</c><00:15:41.519><c> not</c>

00:15:41.810 --> 00:15:41.820 align:start position:0%
compute the scheduled words that's not
 

00:15:41.820 --> 00:15:44.329 align:start position:0%
compute the scheduled words that's not
true<00:15:42.060><c> on</c><00:15:42.480><c> arm</c><00:15:42.720><c> on</c><00:15:43.500><c> arm</c>

00:15:44.329 --> 00:15:44.339 align:start position:0%
true on arm on arm
 

00:15:44.339 --> 00:15:47.210 align:start position:0%
true on arm on arm
open<00:15:45.060><c> SSL</c><00:15:45.720><c> had</c><00:15:46.019><c> a</c><00:15:46.320><c> library</c>

00:15:47.210 --> 00:15:47.220 align:start position:0%
open SSL had a library
 

00:15:47.220 --> 00:15:50.569 align:start position:0%
open SSL had a library
uh<00:15:48.180><c> using</c><00:15:48.959><c> neon</c><00:15:49.440><c> instructions</c><00:15:49.980><c> Vector</c>

00:15:50.569 --> 00:15:50.579 align:start position:0%
uh using neon instructions Vector
 

00:15:50.579 --> 00:15:52.430 align:start position:0%
uh using neon instructions Vector
instructions<00:15:51.000><c> to</c><00:15:51.180><c> compute</c><00:15:51.540><c> the</c><00:15:51.660><c> the</c><00:15:51.779><c> hashing</c>

00:15:52.430 --> 00:15:52.440 align:start position:0%
instructions to compute the the hashing
 

00:15:52.440 --> 00:15:54.769 align:start position:0%
instructions to compute the the hashing
and<00:15:52.860><c> it</c><00:15:52.920><c> turned</c><00:15:53.220><c> out</c><00:15:53.279><c> to</c><00:15:53.519><c> be</c><00:15:53.760><c> slower</c><00:15:54.060><c> than</c><00:15:54.360><c> than</c>

00:15:54.769 --> 00:15:54.779 align:start position:0%
and it turned out to be slower than than
 

00:15:54.779 --> 00:15:58.550 align:start position:0%
and it turned out to be slower than than
scalar<00:15:55.440><c> so</c><00:15:56.399><c> most</c><00:15:57.300><c> libraries</c><00:15:57.720><c> for</c><00:15:57.899><c> arm</c><00:15:58.079><c> do</c><00:15:58.380><c> not</c>

00:15:58.550 --> 00:15:58.560 align:start position:0%
scalar so most libraries for arm do not
 

00:15:58.560 --> 00:16:01.550 align:start position:0%
scalar so most libraries for arm do not
use<00:15:59.060><c> scalar</c><00:16:00.060><c> instructions</c>

00:16:01.550 --> 00:16:01.560 align:start position:0%
use scalar instructions
 

00:16:01.560 --> 00:16:04.129 align:start position:0%
use scalar instructions
however<00:16:02.399><c> if</c><00:16:02.880><c> you're</c><00:16:03.000><c> gonna</c><00:16:03.240><c> Hash</c><00:16:03.540><c> a</c><00:16:03.779><c> miracle</c>

00:16:04.129 --> 00:16:04.139 align:start position:0%
however if you're gonna Hash a miracle
 

00:16:04.139 --> 00:16:05.090 align:start position:0%
however if you're gonna Hash a miracle
tree

00:16:05.090 --> 00:16:05.100 align:start position:0%
tree
 

00:16:05.100 --> 00:16:07.009 align:start position:0%
tree
you<00:16:05.639><c> can</c><00:16:05.760><c> hash</c><00:16:05.940><c> several</c><00:16:06.420><c> blocks</c><00:16:06.720><c> at</c><00:16:06.839><c> the</c><00:16:06.959><c> same</c>

00:16:07.009 --> 00:16:07.019 align:start position:0%
you can hash several blocks at the same
 

00:16:07.019 --> 00:16:08.569 align:start position:0%
you can hash several blocks at the same
time<00:16:07.139><c> and</c><00:16:07.440><c> that's</c><00:16:07.620><c> very</c><00:16:07.920><c> very</c><00:16:08.100><c> much</c><00:16:08.339><c> much</c>

00:16:08.569 --> 00:16:08.579 align:start position:0%
time and that's very very much much
 

00:16:08.579 --> 00:16:11.329 align:start position:0%
time and that's very very much much
faster<00:16:09.000><c> than</c><00:16:09.600><c> hashing</c><00:16:10.079><c> them</c><00:16:10.199><c> on</c><00:16:10.380><c> scale</c><00:16:10.620><c> so</c><00:16:11.160><c> the</c>

00:16:11.329 --> 00:16:11.339 align:start position:0%
faster than hashing them on scale so the
 

00:16:11.339 --> 00:16:13.610 align:start position:0%
faster than hashing them on scale so the
pipelining<00:16:11.880><c> for</c><00:16:12.060><c> arm</c><00:16:12.180><c> I</c><00:16:12.540><c> think</c><00:16:12.720><c> is</c><00:16:12.899><c> purely</c>

00:16:13.610 --> 00:16:13.620 align:start position:0%
pipelining for arm I think is purely
 

00:16:13.620 --> 00:16:14.689 align:start position:0%
pipelining for arm I think is purely
mine

00:16:14.689 --> 00:16:14.699 align:start position:0%
mine
 

00:16:14.699 --> 00:16:16.189 align:start position:0%
mine
let's<00:16:15.120><c> say</c><00:16:15.300><c> that</c><00:16:15.420><c> you</c><00:16:15.600><c> want</c><00:16:15.720><c> to</c><00:16:15.839><c> use</c><00:16:15.959><c> this</c>

00:16:16.189 --> 00:16:16.199 align:start position:0%
let's say that you want to use this
 

00:16:16.199 --> 00:16:18.350 align:start position:0%
let's say that you want to use this
library<00:16:16.320><c> and</c><00:16:16.620><c> you</c><00:16:16.740><c> want</c><00:16:16.860><c> to</c><00:16:16.980><c> implement</c><00:16:17.339><c> it</c><00:16:17.519><c> so</c>

00:16:18.350 --> 00:16:18.360 align:start position:0%
library and you want to implement it so
 

00:16:18.360 --> 00:16:20.509 align:start position:0%
library and you want to implement it so
there<00:16:18.600><c> are</c><00:16:18.720><c> changes</c><00:16:19.079><c> to</c><00:16:19.199><c> your</c><00:16:19.380><c> code</c>

00:16:20.509 --> 00:16:20.519 align:start position:0%
there are changes to your code
 

00:16:20.519 --> 00:16:23.269 align:start position:0%
there are changes to your code
so<00:16:20.940><c> the</c><00:16:21.180><c> changes</c><00:16:21.540><c> the</c><00:16:21.720><c> following</c><00:16:22.079><c> since</c><00:16:22.860><c> let</c>

00:16:23.269 --> 00:16:23.279 align:start position:0%
so the changes the following since let
 

00:16:23.279 --> 00:16:26.210 align:start position:0%
so the changes the following since let
me<00:16:23.399><c> go</c><00:16:23.579><c> back</c><00:16:23.760><c> a</c><00:16:24.000><c> few</c><00:16:24.120><c> slides</c><00:16:24.899><c> perhaps</c><00:16:25.500><c> ah</c><00:16:26.040><c> it</c>

00:16:26.210 --> 00:16:26.220 align:start position:0%
me go back a few slides perhaps ah it
 

00:16:26.220 --> 00:16:29.329 align:start position:0%
me go back a few slides perhaps ah it
did<00:16:26.399><c> had</c><00:16:26.579><c> a</c><00:16:26.760><c> pointer</c><00:16:27.060><c> oh</c>

00:16:29.329 --> 00:16:29.339 align:start position:0%
did had a pointer oh
 

00:16:29.339 --> 00:16:32.389 align:start position:0%
did had a pointer oh
I'm<00:16:29.880><c> just</c><00:16:30.120><c> technology</c><00:16:30.600><c> at</c><00:16:31.079><c> first</c><00:16:31.320><c> okay</c>

00:16:32.389 --> 00:16:32.399 align:start position:0%
I'm just technology at first okay
 

00:16:32.399 --> 00:16:33.889 align:start position:0%
I'm just technology at first okay
anyways

00:16:33.889 --> 00:16:33.899 align:start position:0%
anyways
 

00:16:33.899 --> 00:16:36.829 align:start position:0%
anyways
let's<00:16:34.440><c> see</c><00:16:34.620><c> this</c><00:16:35.040><c> is</c><00:16:35.100><c> the</c><00:16:35.399><c> the</c>

00:16:36.829 --> 00:16:36.839 align:start position:0%
let's see this is the the
 

00:16:36.839 --> 00:16:38.930 align:start position:0%
let's see this is the the
so<00:16:37.320><c> as</c><00:16:37.440><c> I</c><00:16:37.620><c> told</c><00:16:37.740><c> you</c><00:16:37.860><c> I'm</c><00:16:38.160><c> gonna</c><00:16:38.279><c> hash</c><00:16:38.579><c> with</c>

00:16:38.930 --> 00:16:38.940 align:start position:0%
so as I told you I'm gonna hash with
 

00:16:38.940 --> 00:16:40.730 align:start position:0%
so as I told you I'm gonna hash with
this<00:16:39.120><c> kind</c><00:16:39.240><c> of</c><00:16:39.360><c> registers</c><00:16:39.720><c> we</c><00:16:39.959><c> can</c><00:16:40.139><c> hash</c><00:16:40.320><c> ah</c>

00:16:40.730 --> 00:16:40.740 align:start position:0%
this kind of registers we can hash ah
 

00:16:40.740 --> 00:16:42.050 align:start position:0%
this kind of registers we can hash ah
now<00:16:40.860><c> I</c><00:16:40.980><c> have</c><00:16:41.100><c> a</c><00:16:41.220><c> point</c>

00:16:42.050 --> 00:16:42.060 align:start position:0%
now I have a point
 

00:16:42.060 --> 00:16:43.850 align:start position:0%
now I have a point
of<00:16:42.300><c> course</c><00:16:42.540><c> since</c><00:16:43.259><c> with</c><00:16:43.500><c> this</c><00:16:43.680><c> kind</c><00:16:43.800><c> of</c>

00:16:43.850 --> 00:16:43.860 align:start position:0%
of course since with this kind of
 

00:16:43.860 --> 00:16:45.889 align:start position:0%
of course since with this kind of
register<00:16:44.160><c> I</c><00:16:44.399><c> can</c><00:16:44.519><c> hash</c><00:16:44.759><c> four</c><00:16:45.240><c> blocks</c><00:16:45.600><c> at</c><00:16:45.779><c> a</c>

00:16:45.889 --> 00:16:45.899 align:start position:0%
register I can hash four blocks at a
 

00:16:45.899 --> 00:16:47.629 align:start position:0%
register I can hash four blocks at a
time<00:16:46.019><c> that</c><00:16:46.440><c> means</c><00:16:46.680><c> that</c><00:16:46.800><c> I</c><00:16:46.920><c> can</c><00:16:47.040><c> compute</c><00:16:47.399><c> this</c>

00:16:47.629 --> 00:16:47.639 align:start position:0%
time that means that I can compute this
 

00:16:47.639 --> 00:16:49.129 align:start position:0%
time that means that I can compute this
entire<00:16:48.060><c> layer</c>

00:16:49.129 --> 00:16:49.139 align:start position:0%
entire layer
 

00:16:49.139 --> 00:16:51.710 align:start position:0%
entire layer
in<00:16:49.620><c> one</c><00:16:49.800><c> pass</c><00:16:50.040><c> of</c><00:16:50.399><c> the</c><00:16:50.519><c> Russia</c><00:16:50.880><c> so</c><00:16:51.420><c> instead</c><00:16:51.660><c> of</c>

00:16:51.710 --> 00:16:51.720 align:start position:0%
in one pass of the Russia so instead of
 

00:16:51.720 --> 00:16:53.329 align:start position:0%
in one pass of the Russia so instead of
passing<00:16:52.019><c> on</c><00:16:52.139><c> a</c><00:16:52.259><c> loop</c><00:16:52.440><c> and</c><00:16:52.560><c> hash</c><00:16:52.740><c> this</c><00:16:52.920><c> to</c><00:16:53.100><c> Hash</c>

00:16:53.329 --> 00:16:53.339 align:start position:0%
passing on a loop and hash this to Hash
 

00:16:53.339 --> 00:16:55.069 align:start position:0%
passing on a loop and hash this to Hash
these<00:16:53.579><c> two</c><00:16:53.699><c> hashes</c><00:16:54.060><c> to</c><00:16:54.180><c> and</c><00:16:54.360><c> so</c><00:16:54.480><c> forth</c><00:16:54.660><c> what</c>

00:16:55.069 --> 00:16:55.079 align:start position:0%
these two hashes to and so forth what
 

00:16:55.079 --> 00:16:57.410 align:start position:0%
these two hashes to and so forth what
I'll<00:16:55.259><c> do</c><00:16:55.500><c> is</c><00:16:55.680><c> and</c><00:16:56.279><c> this</c><00:16:56.399><c> is</c><00:16:56.519><c> a</c><00:16:56.639><c> requirement</c><00:16:57.000><c> you</c>

00:16:57.410 --> 00:16:57.420 align:start position:0%
I'll do is and this is a requirement you
 

00:16:57.420 --> 00:17:00.350 align:start position:0%
I'll do is and this is a requirement you
cannot<00:16:57.720><c> use</c><00:16:58.019><c> Proto's</c><00:16:58.800><c> implementation</c><00:16:59.459><c> that</c>

00:17:00.350 --> 00:17:00.360 align:start position:0%
cannot use Proto's implementation that
 

00:17:00.360 --> 00:17:03.110 align:start position:0%
cannot use Proto's implementation that
has<00:17:00.540><c> pointers</c><00:17:01.079><c> everywhere</c><00:17:01.560><c> and</c><00:17:02.339><c> the</c><00:17:02.699><c> data</c><00:17:03.000><c> can</c>

00:17:03.110 --> 00:17:03.120 align:start position:0%
has pointers everywhere and the data can
 

00:17:03.120 --> 00:17:05.030 align:start position:0%
has pointers everywhere and the data can
be<00:17:03.300><c> anywhere</c><00:17:03.660><c> if</c><00:17:04.439><c> you</c><00:17:04.500><c> want</c><00:17:04.620><c> to</c><00:17:04.740><c> use</c><00:17:04.860><c> this</c>

00:17:05.030 --> 00:17:05.040 align:start position:0%
be anywhere if you want to use this
 

00:17:05.040 --> 00:17:06.890 align:start position:0%
be anywhere if you want to use this
library<00:17:05.220><c> then</c><00:17:05.579><c> you</c><00:17:05.819><c> need</c><00:17:05.939><c> to</c><00:17:06.059><c> have</c><00:17:06.299><c> at</c><00:17:06.780><c> the</c>

00:17:06.890 --> 00:17:06.900 align:start position:0%
library then you need to have at the
 

00:17:06.900 --> 00:17:08.390 align:start position:0%
library then you need to have at the
very<00:17:07.020><c> least</c><00:17:07.199><c> this</c><00:17:07.679><c> entire</c><00:17:08.040><c> layer</c>

00:17:08.390 --> 00:17:08.400 align:start position:0%
very least this entire layer
 

00:17:08.400 --> 00:17:11.150 align:start position:0%
very least this entire layer
consecutively<00:17:09.360><c> memory</c><00:17:09.839><c> and</c><00:17:10.620><c> this</c><00:17:10.860><c> entire</c>

00:17:11.150 --> 00:17:11.160 align:start position:0%
consecutively memory and this entire
 

00:17:11.160 --> 00:17:13.370 align:start position:0%
consecutively memory and this entire
layer<00:17:11.579><c> consecutively</c><00:17:12.360><c> in</c><00:17:12.540><c> memory</c><00:17:12.900><c> and</c><00:17:13.199><c> so</c>

00:17:13.370 --> 00:17:13.380 align:start position:0%
layer consecutively in memory and so
 

00:17:13.380 --> 00:17:14.569 align:start position:0%
layer consecutively in memory and so
forth

00:17:14.569 --> 00:17:14.579 align:start position:0%
forth
 

00:17:14.579 --> 00:17:16.610 align:start position:0%
forth
uh<00:17:15.179><c> vitalik's</c><00:17:15.780><c> flat</c><00:17:15.959><c> array</c><00:17:16.199><c> would</c><00:17:16.439><c> work</c>

00:17:16.610 --> 00:17:16.620 align:start position:0%
uh vitalik's flat array would work
 

00:17:16.620 --> 00:17:19.189 align:start position:0%
uh vitalik's flat array would work
fantastic<00:17:17.040><c> for</c><00:17:17.640><c> this</c><00:17:17.760><c> for</c><00:17:18.059><c> this</c><00:17:18.179><c> thing</c><00:17:18.419><c> you</c>

00:17:19.189 --> 00:17:19.199 align:start position:0%
fantastic for this for this thing you
 

00:17:19.199 --> 00:17:20.929 align:start position:0%
fantastic for this for this thing you
would<00:17:19.380><c> I</c><00:17:19.620><c> would</c><00:17:19.740><c> if</c><00:17:20.040><c> I</c><00:17:20.220><c> were</c><00:17:20.339><c> to</c><00:17:20.459><c> implement</c>

00:17:20.929 --> 00:17:20.939 align:start position:0%
would I would if I were to implement
 

00:17:20.939 --> 00:17:22.669 align:start position:0%
would I would if I were to implement
this<00:17:21.179><c> I</c><00:17:21.480><c> would</c><00:17:21.660><c> just</c><00:17:21.780><c> put</c><00:17:21.900><c> everything</c><00:17:22.140><c> on</c><00:17:22.439><c> one</c>

00:17:22.669 --> 00:17:22.679 align:start position:0%
this I would just put everything on one
 

00:17:22.679 --> 00:17:25.250 align:start position:0%
this I would just put everything on one
array<00:17:23.040><c> the</c><00:17:23.699><c> point</c><00:17:23.880><c> is</c><00:17:24.000><c> that</c><00:17:24.419><c> what</c><00:17:25.140><c> you're</c>

00:17:25.250 --> 00:17:25.260 align:start position:0%
array the point is that what you're
 

00:17:25.260 --> 00:17:27.650 align:start position:0%
array the point is that what you're
going<00:17:25.439><c> to</c><00:17:25.500><c> pass</c><00:17:25.679><c> the</c><00:17:25.860><c> hasher</c><00:17:26.339><c> is</c><00:17:26.579><c> a</c><00:17:27.179><c> pointer</c><00:17:27.480><c> to</c>

00:17:27.650 --> 00:17:27.660 align:start position:0%
going to pass the hasher is a pointer to
 

00:17:27.660 --> 00:17:29.570 align:start position:0%
going to pass the hasher is a pointer to
this<00:17:27.900><c> or</c><00:17:28.319><c> this</c><00:17:28.559><c> whole</c><00:17:28.740><c> slides</c><00:17:29.220><c> whatever</c>

00:17:29.570 --> 00:17:29.580 align:start position:0%
this or this whole slides whatever
 

00:17:29.580 --> 00:17:32.450 align:start position:0%
this or this whole slides whatever
equivalent<00:17:30.440><c> signature</c><00:17:31.440><c> for</c><00:17:31.620><c> this</c><00:17:31.799><c> is</c><00:17:31.980><c> and</c><00:17:32.280><c> the</c>

00:17:32.450 --> 00:17:32.460 align:start position:0%
equivalent signature for this is and the
 

00:17:32.460 --> 00:17:34.130 align:start position:0%
equivalent signature for this is and the
hasher<00:17:32.820><c> is</c><00:17:32.880><c> going</c><00:17:33.059><c> to</c><00:17:33.120><c> give</c><00:17:33.240><c> you</c><00:17:33.360><c> back</c><00:17:33.600><c> all</c><00:17:34.020><c> of</c>

00:17:34.130 --> 00:17:34.140 align:start position:0%
hasher is going to give you back all of
 

00:17:34.140 --> 00:17:35.810 align:start position:0%
hasher is going to give you back all of
this<00:17:34.260><c> at</c><00:17:34.440><c> the</c><00:17:34.559><c> same</c><00:17:34.679><c> time</c><00:17:34.799><c> so</c><00:17:35.520><c> this</c><00:17:35.700><c> is</c>

00:17:35.810 --> 00:17:35.820 align:start position:0%
this at the same time so this is
 

00:17:35.820 --> 00:17:37.549 align:start position:0%
this at the same time so this is
something<00:17:36.000><c> that</c><00:17:36.299><c> you</c><00:17:36.419><c> need</c><00:17:36.539><c> to</c><00:17:36.660><c> change</c><00:17:36.900><c> the</c>

00:17:37.549 --> 00:17:37.559 align:start position:0%
something that you need to change the
 

00:17:37.559 --> 00:17:40.010 align:start position:0%
something that you need to change the
hasher<00:17:38.039><c> signature</c><00:17:38.460><c> for</c><00:17:38.580><c> this</c><00:17:38.880><c> has</c><00:17:39.419><c> this</c><00:17:39.840><c> form</c>

00:17:40.010 --> 00:17:40.020 align:start position:0%
hasher signature for this has this form
 

00:17:40.020 --> 00:17:42.950 align:start position:0%
hasher signature for this has this form
so<00:17:40.500><c> in</c><00:17:40.679><c> go</c><00:17:40.919><c> this</c><00:17:41.340><c> takes</c><00:17:41.580><c> an</c><00:17:42.120><c> arbitrary</c><00:17:42.600><c> by</c><00:17:42.780><c> its</c>

00:17:42.950 --> 00:17:42.960 align:start position:0%
so in go this takes an arbitrary by its
 

00:17:42.960 --> 00:17:44.630 align:start position:0%
so in go this takes an arbitrary by its
life<00:17:43.140><c> so</c><00:17:43.380><c> this</c><00:17:43.559><c> is</c><00:17:43.679><c> the</c><00:17:43.919><c> layer</c><00:17:44.220><c> that</c><00:17:44.400><c> you</c><00:17:44.520><c> want</c>

00:17:44.630 --> 00:17:44.640 align:start position:0%
life so this is the layer that you want
 

00:17:44.640 --> 00:17:47.990 align:start position:0%
life so this is the layer that you want
to<00:17:44.700><c> hash</c><00:17:44.940><c> and</c><00:17:45.419><c> it</c><00:17:45.539><c> gives</c><00:17:45.720><c> you</c><00:17:45.900><c> back</c><00:17:46.140><c> and</c><00:17:47.280><c> a</c>

00:17:47.990 --> 00:17:48.000 align:start position:0%
to hash and it gives you back and a
 

00:17:48.000 --> 00:17:50.810 align:start position:0%
to hash and it gives you back and a
slice<00:17:48.419><c> of</c><00:17:48.780><c> hashes</c><00:17:49.559><c> of</c><00:17:49.860><c> 32</c><00:17:50.220><c> bites</c><00:17:50.640><c> these</c>

00:17:50.810 --> 00:17:50.820 align:start position:0%
slice of hashes of 32 bites these
 

00:17:50.820 --> 00:17:52.730 align:start position:0%
slice of hashes of 32 bites these
hatches<00:17:51.179><c> all</c><00:17:51.299><c> of</c><00:17:51.419><c> them</c><00:17:51.480><c> at</c><00:17:51.600><c> the</c><00:17:51.720><c> same</c><00:17:51.840><c> time</c>

00:17:52.730 --> 00:17:52.740 align:start position:0%
hatches all of them at the same time
 

00:17:52.740 --> 00:17:55.430 align:start position:0%
hatches all of them at the same time
uh<00:17:53.640><c> I</c><00:17:54.240><c> think</c><00:17:54.360><c> I</c><00:17:54.660><c> might</c><00:17:54.840><c> have</c><00:17:54.960><c> gotten</c><00:17:55.260><c> this</c>

00:17:55.430 --> 00:17:55.440 align:start position:0%
uh I think I might have gotten this
 

00:17:55.440 --> 00:17:56.990 align:start position:0%
uh I think I might have gotten this
correctly<00:17:55.860><c> in</c><00:17:55.980><c> Rust</c><00:17:56.340><c> after</c><00:17:56.580><c> several</c>

00:17:56.990 --> 00:17:57.000 align:start position:0%
correctly in Rust after several
 

00:17:57.000 --> 00:18:00.470 align:start position:0%
correctly in Rust after several
iterations<00:17:57.419><c> uh</c><00:17:58.320><c> this</c><00:17:58.559><c> would</c><00:17:58.679><c> be</c><00:17:58.799><c> in</c><00:17:58.919><c> Python</c>

00:18:00.470 --> 00:18:00.480 align:start position:0%
iterations uh this would be in Python
 

00:18:00.480 --> 00:18:03.049 align:start position:0%
iterations uh this would be in Python
uh<00:18:01.260><c> we</c><00:18:01.679><c> have</c><00:18:01.860><c> a</c><00:18:02.039><c> library</c>

00:18:03.049 --> 00:18:03.059 align:start position:0%
uh we have a library
 

00:18:03.059 --> 00:18:05.750 align:start position:0%
uh we have a library
uh<00:18:03.780><c> we</c><00:18:04.020><c> have</c><00:18:04.140><c> two</c><00:18:04.320><c> libraries</c><00:18:04.679><c> we</c><00:18:04.980><c> have</c><00:18:05.100><c> one</c><00:18:05.400><c> in</c>

00:18:05.750 --> 00:18:05.760 align:start position:0%
uh we have two libraries we have one in
 

00:18:05.760 --> 00:18:07.850 align:start position:0%
uh we have two libraries we have one in
go<00:18:05.880><c> assembly</c><00:18:06.360><c> and</c><00:18:06.480><c> we</c><00:18:06.600><c> have</c><00:18:06.720><c> one</c><00:18:07.020><c> in</c><00:18:07.500><c> user</c>

00:18:07.850 --> 00:18:07.860 align:start position:0%
go assembly and we have one in user
 

00:18:07.860 --> 00:18:09.830 align:start position:0%
go assembly and we have one in user
assembly<00:18:08.280><c> with</c><00:18:08.580><c> C</c><00:18:08.760><c> bindings</c>

00:18:09.830 --> 00:18:09.840 align:start position:0%
assembly with C bindings
 

00:18:09.840 --> 00:18:11.990 align:start position:0%
assembly with C bindings
if<00:18:10.440><c> you</c><00:18:10.679><c> are</c><00:18:10.799><c> going</c><00:18:10.980><c> to</c><00:18:11.100><c> use</c><00:18:11.280><c> that</c><00:18:11.520><c> let</c><00:18:11.700><c> me</c><00:18:11.880><c> know</c>

00:18:11.990 --> 00:18:12.000 align:start position:0%
if you are going to use that let me know
 

00:18:12.000 --> 00:18:13.070 align:start position:0%
if you are going to use that let me know
because

00:18:13.070 --> 00:18:13.080 align:start position:0%
because
 

00:18:13.080 --> 00:18:15.830 align:start position:0%
because
crypto<00:18:13.799><c> extensions</c><00:18:14.280><c> on</c><00:18:14.820><c> arm</c><00:18:15.120><c> is</c><00:18:15.419><c> still</c><00:18:15.660><c> not</c>

00:18:15.830 --> 00:18:15.840 align:start position:0%
crypto extensions on arm is still not
 

00:18:15.840 --> 00:18:17.330 align:start position:0%
crypto extensions on arm is still not
implemented<00:18:16.380><c> it's</c><00:18:16.620><c> going</c><00:18:16.799><c> to</c><00:18:16.919><c> take</c><00:18:17.039><c> like</c><00:18:17.160><c> 10</c>

00:18:17.330 --> 00:18:17.340 align:start position:0%
implemented it's going to take like 10
 

00:18:17.340 --> 00:18:18.049 align:start position:0%
implemented it's going to take like 10
minutes

00:18:18.049 --> 00:18:18.059 align:start position:0%
minutes
 

00:18:18.059 --> 00:18:20.450 align:start position:0%
minutes
to<00:18:18.539><c> add</c><00:18:18.780><c> this</c><00:18:19.020><c> but</c><00:18:19.620><c> this</c><00:18:19.799><c> is</c><00:18:19.860><c> the</c><00:18:20.039><c> signature</c>

00:18:20.450 --> 00:18:20.460 align:start position:0%
to add this but this is the signature
 

00:18:20.460 --> 00:18:22.490 align:start position:0%
to add this but this is the signature
that<00:18:20.880><c> the</c><00:18:21.539><c> library</c><00:18:21.660><c> is</c><00:18:21.900><c> going</c><00:18:22.080><c> to</c><00:18:22.200><c> use</c><00:18:22.320><c> if</c>

00:18:22.490 --> 00:18:22.500 align:start position:0%
that the library is going to use if
 

00:18:22.500 --> 00:18:25.730 align:start position:0%
that the library is going to use if
you're<00:18:22.679><c> using</c><00:18:22.980><c> a</c><00:18:23.160><c> c</c><00:18:23.220><c> bindings</c>

00:18:25.730 --> 00:18:25.740 align:start position:0%
you're using a c bindings
 

00:18:25.740 --> 00:18:27.890 align:start position:0%
you're using a c bindings
all<00:18:26.160><c> right</c><00:18:26.280><c> so</c><00:18:26.700><c> that's</c><00:18:27.000><c> all</c><00:18:27.360><c> I</c><00:18:27.539><c> want</c><00:18:27.600><c> to</c><00:18:27.720><c> tell</c>

00:18:27.890 --> 00:18:27.900 align:start position:0%
all right so that's all I want to tell
 

00:18:27.900 --> 00:18:31.789 align:start position:0%
all right so that's all I want to tell
you<00:18:28.080><c> and</c><00:18:28.679><c> that's</c><00:18:28.799><c> that's</c><00:18:29.100><c> it</c>

00:18:31.789 --> 00:18:31.799 align:start position:0%
 
 

00:18:31.799 --> 00:18:33.890 align:start position:0%
 
okay<00:18:32.520><c> sure</c><00:18:32.760><c> I'll</c><00:18:33.059><c> just</c><00:18:33.179><c> repeat</c><00:18:33.360><c> that</c><00:18:33.600><c> for</c><00:18:33.720><c> the</c>

00:18:33.890 --> 00:18:33.900 align:start position:0%
okay sure I'll just repeat that for the
 

00:18:33.900 --> 00:18:35.210 align:start position:0%
okay sure I'll just repeat that for the
sake<00:18:34.020><c> of</c><00:18:34.140><c> the</c><00:18:34.260><c> recording</c><00:18:34.500><c> I</c><00:18:34.620><c> was</c><00:18:34.799><c> just</c><00:18:34.860><c> asking</c>

00:18:35.210 --> 00:18:35.220 align:start position:0%
sake of the recording I was just asking
 

00:18:35.220 --> 00:18:36.230 align:start position:0%
sake of the recording I was just asking
if

00:18:36.230 --> 00:18:36.240 align:start position:0%
if
 

00:18:36.240 --> 00:18:38.990 align:start position:0%
if
um<00:18:36.320><c> uh</c><00:18:37.320><c> the</c><00:18:37.679><c> the</c><00:18:37.740><c> ability</c><00:18:38.340><c> to</c><00:18:38.640><c> process</c>

00:18:38.990 --> 00:18:39.000 align:start position:0%
um uh the the ability to process
 

00:18:39.000 --> 00:18:40.789 align:start position:0%
um uh the the ability to process
multiple<00:18:39.660><c> different</c><00:18:39.840><c> hashes</c><00:18:40.260><c> in</c><00:18:40.440><c> parallel</c>

00:18:40.789 --> 00:18:40.799 align:start position:0%
multiple different hashes in parallel
 

00:18:40.799 --> 00:18:42.230 align:start position:0%
multiple different hashes in parallel
was<00:18:41.039><c> already</c><00:18:41.220><c> implemented</c><00:18:41.700><c> in</c><00:18:41.880><c> libraries</c>

00:18:42.230 --> 00:18:42.240 align:start position:0%
was already implemented in libraries
 

00:18:42.240 --> 00:18:45.710 align:start position:0%
was already implemented in libraries
that<00:18:42.600><c> was</c><00:18:42.780><c> the</c><00:18:43.440><c> question</c><00:18:44.100><c> to</c><00:18:44.400><c> the</c><00:18:44.640><c> answer</c>

00:18:45.710 --> 00:18:45.720 align:start position:0%
that was the question to the answer
 

00:18:45.720 --> 00:18:48.350 align:start position:0%
that was the question to the answer
um<00:18:45.840><c> so</c><00:18:46.500><c> so</c><00:18:47.220><c> that</c><00:18:47.520><c> so</c><00:18:47.760><c> there's</c><00:18:47.880><c> two</c><00:18:48.059><c> things</c><00:18:48.179><c> that</c>

00:18:48.350 --> 00:18:48.360 align:start position:0%
um so so that so there's two things that
 

00:18:48.360 --> 00:18:50.090 align:start position:0%
um so so that so there's two things that
you<00:18:48.419><c> have</c><00:18:48.539><c> here</c><00:18:48.660><c> right</c><00:18:48.840><c> one</c><00:18:49.080><c> is</c><00:18:49.320><c> to</c><00:18:49.679><c> like</c>

00:18:50.090 --> 00:18:50.100 align:start position:0%
you have here right one is to like
 

00:18:50.100 --> 00:18:52.549 align:start position:0%
you have here right one is to like
pre-compute<00:18:50.820><c> the</c><00:18:51.059><c> padding</c><00:18:51.539><c> block</c><00:18:51.720><c> and</c><00:18:52.440><c> then</c>

00:18:52.549 --> 00:18:52.559 align:start position:0%
pre-compute the padding block and then
 

00:18:52.559 --> 00:18:56.029 align:start position:0%
pre-compute the padding block and then
the<00:18:52.740><c> second</c><00:18:52.860><c> is</c><00:18:53.220><c> the</c><00:18:53.400><c> ability</c><00:18:53.640><c> to</c><00:18:54.299><c> to</c><00:18:55.039><c> in</c>

00:18:56.029 --> 00:18:56.039 align:start position:0%
the second is the ability to to in
 

00:18:56.039 --> 00:18:58.850 align:start position:0%
the second is the ability to to in
parallel<00:18:56.600><c> process</c><00:18:57.600><c> multiple</c><00:18:58.260><c> different</c><00:18:58.500><c> hash</c>

00:18:58.850 --> 00:18:58.860 align:start position:0%
parallel process multiple different hash
 

00:18:58.860 --> 00:19:00.650 align:start position:0%
parallel process multiple different hash
values<00:18:59.280><c> and</c><00:18:59.520><c> then</c><00:18:59.640><c> produce</c><00:19:00.120><c> multiple</c>

00:19:00.650 --> 00:19:00.660 align:start position:0%
values and then produce multiple
 

00:19:00.660 --> 00:19:02.690 align:start position:0%
values and then produce multiple
different<00:19:00.960><c> hash</c><00:19:01.320><c> values</c><00:19:01.679><c> right</c><00:19:01.799><c> correct</c><00:19:02.160><c> and</c>

00:19:02.690 --> 00:19:02.700 align:start position:0%
different hash values right correct and
 

00:19:02.700 --> 00:19:03.730 align:start position:0%
different hash values right correct and
so

00:19:03.730 --> 00:19:03.740 align:start position:0%
so
 

00:19:03.740 --> 00:19:06.049 align:start position:0%
so
there<00:19:04.740><c> are</c><00:19:04.860><c> already</c><00:19:04.980><c> implementations</c><00:19:05.700><c> that</c>

00:19:06.049 --> 00:19:06.059 align:start position:0%
there are already implementations that
 

00:19:06.059 --> 00:19:07.610 align:start position:0%
there are already implementations that
do<00:19:06.240><c> multiple</c><00:19:06.539><c> different</c><00:19:06.780><c> hash</c><00:19:07.080><c> values</c><00:19:07.440><c> at</c>

00:19:07.610 --> 00:19:07.620 align:start position:0%
do multiple different hash values at
 

00:19:07.620 --> 00:19:09.950 align:start position:0%
do multiple different hash values at
once<00:19:07.860><c> and</c><00:19:08.100><c> you</c><00:19:08.280><c> just</c><00:19:08.400><c> modified</c><00:19:08.760><c> them</c><00:19:09.179><c> to</c><00:19:09.780><c> deal</c>

00:19:09.950 --> 00:19:09.960 align:start position:0%
once and you just modified them to deal
 

00:19:09.960 --> 00:19:11.630 align:start position:0%
once and you just modified them to deal
with<00:19:10.140><c> the</c><00:19:10.320><c> padding</c><00:19:10.620><c> block</c><00:19:10.740><c> is</c><00:19:10.980><c> that</c><00:19:11.160><c> right</c><00:19:11.280><c> yes</c>

00:19:11.630 --> 00:19:11.640 align:start position:0%
with the padding block is that right yes
 

00:19:11.640 --> 00:19:13.490 align:start position:0%
with the padding block is that right yes
and<00:19:12.299><c> yes</c><00:19:12.660><c> so</c><00:19:12.840><c> so</c><00:19:13.080><c> there</c><00:19:13.260><c> are</c><00:19:13.380><c> two</c>

00:19:13.490 --> 00:19:13.500 align:start position:0%
and yes so so there are two
 

00:19:13.500 --> 00:19:16.070 align:start position:0%
and yes so so there are two
modifications<00:19:13.860><c> here</c><00:19:14.220><c> one</c><00:19:14.700><c> is</c><00:19:14.940><c> uh</c><00:19:15.600><c> the</c><00:19:15.900><c> thing</c>

00:19:16.070 --> 00:19:16.080 align:start position:0%
modifications here one is uh the thing
 

00:19:16.080 --> 00:19:17.390 align:start position:0%
modifications here one is uh the thing
that<00:19:16.320><c> you're</c><00:19:16.500><c> going</c><00:19:16.679><c> to</c><00:19:16.799><c> use</c><00:19:16.860><c> the</c><00:19:17.039><c> padding</c>

00:19:17.390 --> 00:19:17.400 align:start position:0%
that you're going to use the padding
 

00:19:17.400 --> 00:19:20.090 align:start position:0%
that you're going to use the padding
block<00:19:17.520><c> uh</c><00:19:18.480><c> the</c><00:19:19.020><c> padding</c><00:19:19.500><c> block</c><00:19:19.620><c> has</c><00:19:19.860><c> this</c>

00:19:20.090 --> 00:19:20.100 align:start position:0%
block uh the padding block has this
 

00:19:20.100 --> 00:19:21.650 align:start position:0%
block uh the padding block has this
constants<00:19:20.460><c> hardcoded</c><00:19:21.059><c> and</c><00:19:21.419><c> then</c><00:19:21.539><c> there's</c>

00:19:21.650 --> 00:19:21.660 align:start position:0%
constants hardcoded and then there's
 

00:19:21.660 --> 00:19:23.630 align:start position:0%
constants hardcoded and then there's
other<00:19:21.900><c> modification</c><00:19:22.440><c> which</c><00:19:22.799><c> is</c><00:19:22.980><c> the</c><00:19:23.520><c> fact</c>

00:19:23.630 --> 00:19:23.640 align:start position:0%
other modification which is the fact
 

00:19:23.640 --> 00:19:27.770 align:start position:0%
other modification which is the fact
that<00:19:23.940><c> you're</c><00:19:24.480><c> expected</c><00:19:25.080><c> to</c><00:19:25.320><c> get</c><00:19:25.640><c> a</c><00:19:26.640><c> list</c><00:19:26.940><c> of</c><00:19:27.240><c> 64</c>

00:19:27.770 --> 00:19:27.780 align:start position:0%
that you're expected to get a list of 64
 

00:19:27.780 --> 00:19:30.470 align:start position:0%
that you're expected to get a list of 64
bytes<00:19:28.260><c> chunks</c><00:19:28.860><c> and</c><00:19:29.460><c> then</c><00:19:29.580><c> you</c><00:19:29.820><c> pipeline</c><00:19:30.240><c> this</c>

00:19:30.470 --> 00:19:30.480 align:start position:0%
bytes chunks and then you pipeline this
 

00:19:30.480 --> 00:19:33.230 align:start position:0%
bytes chunks and then you pipeline this
so<00:19:30.780><c> what</c><00:19:31.140><c> this</c><00:19:31.500><c> Library</c><00:19:31.620><c> does</c><00:19:32.039><c> is</c><00:19:32.340><c> it</c><00:19:32.820><c> grabs</c>

00:19:33.230 --> 00:19:33.240 align:start position:0%
so what this Library does is it grabs
 

00:19:33.240 --> 00:19:35.510 align:start position:0%
so what this Library does is it grabs
all<00:19:33.960><c> of</c><00:19:34.080><c> the</c><00:19:34.200><c> blocks</c><00:19:34.500><c> consecutively</c><00:19:35.100><c> memory</c>

00:19:35.510 --> 00:19:35.520 align:start position:0%
all of the blocks consecutively memory
 

00:19:35.520 --> 00:19:39.890 align:start position:0%
all of the blocks consecutively memory
it<00:19:36.740><c> gets</c><00:19:37.740><c> a</c><00:19:37.860><c> matrix</c><00:19:38.280><c> on</c><00:19:38.940><c> the</c><00:19:39.120><c> vector</c><00:19:39.480><c> on</c><00:19:39.780><c> the</c>

00:19:39.890 --> 00:19:39.900 align:start position:0%
it gets a matrix on the vector on the
 

00:19:39.900 --> 00:19:41.750 align:start position:0%
it gets a matrix on the vector on the
vector<00:19:40.140><c> registers</c><00:19:40.620><c> it</c><00:19:41.039><c> transposes</c><00:19:41.580><c> this</c>

00:19:41.750 --> 00:19:41.760 align:start position:0%
vector registers it transposes this
 

00:19:41.760 --> 00:19:43.909 align:start position:0%
vector registers it transposes this
Matrix<00:19:42.179><c> and</c><00:19:42.660><c> now</c><00:19:42.900><c> you</c><00:19:43.080><c> have</c><00:19:43.200><c> on</c><00:19:43.500><c> all</c><00:19:43.679><c> of</c><00:19:43.799><c> your</c>

00:19:43.909 --> 00:19:43.919 align:start position:0%
Matrix and now you have on all of your
 

00:19:43.919 --> 00:19:46.250 align:start position:0%
Matrix and now you have on all of your
registers<00:19:44.400><c> the</c><00:19:45.000><c> different</c><00:19:45.179><c> the</c><00:19:45.780><c> different</c>

00:19:46.250 --> 00:19:46.260 align:start position:0%
registers the different the different
 

00:19:46.260 --> 00:19:47.390 align:start position:0%
registers the different the different
messages

00:19:47.390 --> 00:19:47.400 align:start position:0%
messages
 

00:19:47.400 --> 00:19:51.049 align:start position:0%
messages
so<00:19:47.880><c> then</c><00:19:48.059><c> you</c><00:19:48.360><c> can</c><00:19:48.480><c> use</c><00:19:48.780><c> Intel's</c><00:19:49.620><c> Machinery</c><00:19:50.100><c> to</c>

00:19:51.049 --> 00:19:51.059 align:start position:0%
so then you can use Intel's Machinery to
 

00:19:51.059 --> 00:19:53.690 align:start position:0%
so then you can use Intel's Machinery to
Hash<00:19:51.539><c> those</c><00:19:51.780><c> messages</c><00:19:52.020><c> in</c><00:19:52.380><c> parallel</c><00:19:52.799><c> you</c>

00:19:53.690 --> 00:19:53.700 align:start position:0%
Hash those messages in parallel you
 

00:19:53.700 --> 00:19:56.570 align:start position:0%
Hash those messages in parallel you
print<00:19:54.059><c> the</c><00:19:54.660><c> you</c><00:19:54.900><c> output</c><00:19:55.380><c> these</c><00:19:56.100><c> hashes</c><00:19:56.400><c> and</c>

00:19:56.570 --> 00:19:56.580 align:start position:0%
print the you output these hashes and
 

00:19:56.580 --> 00:19:58.850 align:start position:0%
print the you output these hashes and
then<00:19:56.700><c> you</c><00:19:56.880><c> just</c><00:19:57.120><c> Loop</c><00:19:57.720><c> it</c><00:19:57.840><c> back</c><00:19:58.020><c> so</c><00:19:58.679><c> that's</c>

00:19:58.850 --> 00:19:58.860 align:start position:0%
then you just Loop it back so that's
 

00:19:58.860 --> 00:20:00.950 align:start position:0%
then you just Loop it back so that's
cool<00:19:59.160><c> so</c><00:19:59.460><c> you</c><00:19:59.580><c> you</c><00:19:59.700><c> have</c><00:19:59.940><c> so</c><00:20:00.179><c> the</c><00:20:00.299><c> result</c><00:20:00.660><c> is</c>

00:20:00.950 --> 00:20:00.960 align:start position:0%
cool so you you have so the result is
 

00:20:00.960 --> 00:20:03.110 align:start position:0%
cool so you you have so the result is
basically<00:20:01.260><c> like</c><00:20:01.919><c> so</c><00:20:02.220><c> it's</c><00:20:02.400><c> inco</c><00:20:02.700><c> assembly</c>

00:20:03.110 --> 00:20:03.120 align:start position:0%
basically like so it's inco assembly
 

00:20:03.120 --> 00:20:05.390 align:start position:0%
basically like so it's inco assembly
what<00:20:03.299><c> you</c><00:20:03.480><c> have</c><00:20:03.600><c> right</c><00:20:03.840><c> sorry</c><00:20:04.440><c> your</c><00:20:04.980><c> your</c>

00:20:05.390 --> 00:20:05.400 align:start position:0%
what you have right sorry your your
 

00:20:05.400 --> 00:20:08.210 align:start position:0%
what you have right sorry your your
implementation<00:20:06.120><c> is</c><00:20:06.360><c> in</c><00:20:06.539><c> go</c><00:20:06.660><c> assembly</c><00:20:07.140><c> I</c><00:20:07.980><c> yeah</c>

00:20:08.210 --> 00:20:08.220 align:start position:0%
implementation is in go assembly I yeah
 

00:20:08.220 --> 00:20:10.130 align:start position:0%
implementation is in go assembly I yeah
so<00:20:08.460><c> the</c><00:20:09.059><c> original</c><00:20:09.179><c> implementation</c><00:20:09.780><c> was</c><00:20:10.020><c> just</c>

00:20:10.130 --> 00:20:10.140 align:start position:0%
so the original implementation was just
 

00:20:10.140 --> 00:20:12.350 align:start position:0%
so the original implementation was just
purely<00:20:10.500><c> assembly</c><00:20:10.919><c> this</c><00:20:11.160><c> is</c><00:20:11.280><c> there</c><00:20:11.760><c> it</c><00:20:12.059><c> has</c><00:20:12.179><c> C</c>

00:20:12.350 --> 00:20:12.360 align:start position:0%
purely assembly this is there it has C
 

00:20:12.360 --> 00:20:15.770 align:start position:0%
purely assembly this is there it has C
bindings<00:20:12.840><c> but</c><00:20:13.500><c> it</c><00:20:13.740><c> the</c><00:20:14.340><c> C</c><00:20:14.640><c> go</c><00:20:14.940><c> overhead</c><00:20:15.480><c> is</c>

00:20:15.770 --> 00:20:15.780 align:start position:0%
bindings but it the C go overhead is
 

00:20:15.780 --> 00:20:17.750 align:start position:0%
bindings but it the C go overhead is
horrible<00:20:16.200><c> so</c><00:20:16.559><c> it</c><00:20:16.679><c> ended</c><00:20:17.039><c> up</c><00:20:17.100><c> being</c><00:20:17.280><c> slower</c>

00:20:17.750 --> 00:20:17.760 align:start position:0%
horrible so it ended up being slower
 

00:20:17.760 --> 00:20:20.390 align:start position:0%
horrible so it ended up being slower
than<00:20:18.240><c> using</c><00:20:19.020><c> the</c><00:20:19.380><c> go</c><00:20:19.500><c> implementation</c><00:20:20.100><c> the</c>

00:20:20.390 --> 00:20:20.400 align:start position:0%
than using the go implementation the
 

00:20:20.400 --> 00:20:22.610 align:start position:0%
than using the go implementation the
standard<00:20:20.940><c> library</c><00:20:21.120><c> and</c><00:20:21.419><c> go</c><00:20:21.539><c> so</c><00:20:22.080><c> we</c><00:20:22.200><c> needed</c><00:20:22.440><c> to</c>

00:20:22.610 --> 00:20:22.620 align:start position:0%
standard library and go so we needed to
 

00:20:22.620 --> 00:20:24.529 align:start position:0%
standard library and go so we needed to
write<00:20:22.980><c> a</c><00:20:23.220><c> Google</c><00:20:23.460><c> assembly</c><00:20:23.940><c> library</c><00:20:24.120><c> to</c><00:20:24.360><c> use</c>

00:20:24.529 --> 00:20:24.539 align:start position:0%
write a Google assembly library to use
 

00:20:24.539 --> 00:20:27.049 align:start position:0%
write a Google assembly library to use
ourselves<00:20:24.900><c> yeah</c><00:20:25.740><c> okay</c><00:20:25.860><c> cool</c><00:20:26.220><c> well</c><00:20:26.580><c> done</c><00:20:26.820><c> very</c>

00:20:27.049 --> 00:20:27.059 align:start position:0%
ourselves yeah okay cool well done very
 

00:20:27.059 --> 00:20:30.590 align:start position:0%
ourselves yeah okay cool well done very
good<00:20:27.240><c> very</c><00:20:27.539><c> impressive</c><00:20:28.320><c> thanks</c>

00:20:30.590 --> 00:20:30.600 align:start position:0%
good very impressive thanks
 

00:20:30.600 --> 00:20:33.890 align:start position:0%
good very impressive thanks
uh<00:20:31.380><c> so</c><00:20:31.620><c> I</c><00:20:32.039><c> was</c><00:20:32.220><c> curious</c><00:20:32.700><c> you've</c><00:20:33.360><c> shown</c><00:20:33.720><c> that</c>

00:20:33.890 --> 00:20:33.900 align:start position:0%
uh so I was curious you've shown that
 

00:20:33.900 --> 00:20:35.450 align:start position:0%
uh so I was curious you've shown that
there<00:20:34.080><c> are</c><00:20:34.200><c> always</c><00:20:34.320><c> optimizations</c><00:20:34.919><c> you</c><00:20:35.280><c> have</c>

00:20:35.450 --> 00:20:35.460 align:start position:0%
there are always optimizations you have
 

00:20:35.460 --> 00:20:37.430 align:start position:0%
there are always optimizations you have
to<00:20:35.580><c> do</c><00:20:35.760><c> to</c><00:20:35.940><c> get</c><00:20:36.120><c> around</c><00:20:36.240><c> the</c><00:20:36.720><c> general</c><00:20:36.900><c> purpose</c>

00:20:37.430 --> 00:20:37.440 align:start position:0%
to do to get around the general purpose
 

00:20:37.440 --> 00:20:40.190 align:start position:0%
to do to get around the general purpose
nature<00:20:37.919><c> of</c><00:20:38.880><c> these</c><00:20:39.299><c> General</c><00:20:39.480><c> perfect</c><00:20:39.780><c> hash</c>

00:20:40.190 --> 00:20:40.200 align:start position:0%
nature of these General perfect hash
 

00:20:40.200 --> 00:20:42.230 align:start position:0%
nature of these General perfect hash
functions<00:20:40.679><c> do</c><00:20:41.580><c> you</c><00:20:41.760><c> think</c><00:20:41.880><c> it</c><00:20:42.000><c> would</c><00:20:42.179><c> be</c>

00:20:42.230 --> 00:20:42.240 align:start position:0%
functions do you think it would be
 

00:20:42.240 --> 00:20:44.210 align:start position:0%
functions do you think it would be
possible<00:20:42.539><c> to</c><00:20:42.840><c> design</c><00:20:42.960><c> a</c><00:20:43.320><c> hash</c><00:20:43.500><c> function</c><00:20:43.860><c> that</c>

00:20:44.210 --> 00:20:44.220 align:start position:0%
possible to design a hash function that
 

00:20:44.220 --> 00:20:45.890 align:start position:0%
possible to design a hash function that
was<00:20:44.340><c> like</c><00:20:44.460><c> a</c><00:20:44.640><c> special</c><00:20:44.820><c> hash</c><00:20:45.120><c> function</c><00:20:45.419><c> only</c>

00:20:45.890 --> 00:20:45.900 align:start position:0%
was like a special hash function only
 

00:20:45.900 --> 00:20:48.350 align:start position:0%
was like a special hash function only
for<00:20:46.200><c> like</c><00:20:46.440><c> oh</c>

00:20:48.350 --> 00:20:48.360 align:start position:0%
for like oh
 

00:20:48.360 --> 00:20:50.570 align:start position:0%
for like oh
oh<00:20:48.419><c> that's</c><00:20:49.080><c> a</c><00:20:49.260><c> good</c><00:20:49.380><c> question</c><00:20:49.679><c> I'm</c><00:20:50.280><c> not</c><00:20:50.400><c> sure</c>

00:20:50.570 --> 00:20:50.580 align:start position:0%
oh that's a good question I'm not sure
 

00:20:50.580 --> 00:20:53.330 align:start position:0%
oh that's a good question I'm not sure
if<00:20:50.700><c> you</c><00:20:50.820><c> can</c><00:20:51.360><c> do</c><00:20:51.480><c> better</c><00:20:51.720><c> than</c><00:20:52.320><c> the</c><00:20:52.799><c> current</c>

00:20:53.330 --> 00:20:53.340 align:start position:0%
if you can do better than the current
 

00:20:53.340 --> 00:20:55.430 align:start position:0%
if you can do better than the current
implementations<00:20:54.000><c> like</c><00:20:54.360><c> uh</c><00:20:54.660><c> you</c><00:20:54.960><c> can</c><00:20:55.020><c> take</c><00:20:55.140><c> the</c>

00:20:55.430 --> 00:20:55.440 align:start position:0%
implementations like uh you can take the
 

00:20:55.440 --> 00:20:57.890 align:start position:0%
implementations like uh you can take the
sponge<00:20:55.740><c> type</c><00:20:56.280><c> implementations</c><00:20:57.000><c> shot</c><00:20:57.419><c> 3</c><00:20:57.660><c> and</c>

00:20:57.890 --> 00:20:57.900 align:start position:0%
sponge type implementations shot 3 and
 

00:20:57.900 --> 00:21:00.169 align:start position:0%
sponge type implementations shot 3 and
Company<00:20:58.080><c> and</c><00:20:59.039><c> you</c><00:20:59.220><c> can</c><00:20:59.340><c> try</c><00:20:59.460><c> to</c><00:20:59.640><c> adapt</c><00:21:00.000><c> this</c>

00:21:00.169 --> 00:21:00.179 align:start position:0%
Company and you can try to adapt this
 

00:21:00.179 --> 00:21:01.669 align:start position:0%
Company and you can try to adapt this
for<00:21:00.419><c> this</c>

00:21:01.669 --> 00:21:01.679 align:start position:0%
for this
 

00:21:01.679 --> 00:21:04.070 align:start position:0%
for this
I<00:21:02.220><c> don't</c><00:21:02.340><c> know</c><00:21:02.460><c> I</c><00:21:02.760><c> I</c><00:21:02.940><c> think</c><00:21:03.240><c> yeah</c><00:21:03.780><c> your</c>

00:21:04.070 --> 00:21:04.080 align:start position:0%
I don't know I I think yeah your
 

00:21:04.080 --> 00:21:05.690 align:start position:0%
I don't know I I think yeah your
question<00:21:04.200><c> is</c><00:21:04.380><c> completely</c><00:21:04.740><c> open</c><00:21:04.919><c> it's</c><00:21:05.280><c> it's</c><00:21:05.520><c> a</c>

00:21:05.690 --> 00:21:05.700 align:start position:0%
question is completely open it's it's a
 

00:21:05.700 --> 00:21:07.190 align:start position:0%
question is completely open it's it's a
very<00:21:05.820><c> good</c><00:21:05.940><c> question</c><00:21:06.120><c> I</c><00:21:06.360><c> think</c><00:21:06.660><c> we</c><00:21:06.840><c> should</c>

00:21:07.190 --> 00:21:07.200 align:start position:0%
very good question I think we should
 

00:21:07.200 --> 00:21:08.690 align:start position:0%
very good question I think we should
think<00:21:07.320><c> about</c><00:21:07.440><c> this</c>

00:21:08.690 --> 00:21:08.700 align:start position:0%
think about this
 

00:21:08.700 --> 00:21:11.210 align:start position:0%
think about this
so<00:21:09.120><c> if</c><00:21:09.299><c> I</c><00:21:09.539><c> understood</c><00:21:09.840><c> your</c><00:21:10.080><c> question</c><00:21:10.200><c> as</c><00:21:10.500><c> can</c>

00:21:11.210 --> 00:21:11.220 align:start position:0%
so if I understood your question as can
 

00:21:11.220 --> 00:21:13.190 align:start position:0%
so if I understood your question as can
there<00:21:11.400><c> be</c><00:21:11.580><c> a</c><00:21:11.820><c> method</c><00:21:12.179><c> that</c><00:21:12.480><c> is</c><00:21:12.660><c> designed</c><00:21:13.020><c> for</c>

00:21:13.190 --> 00:21:13.200 align:start position:0%
there be a method that is designed for
 

00:21:13.200 --> 00:21:15.590 align:start position:0%
there be a method that is designed for
Merkle<00:21:13.620><c> trades</c><00:21:13.980><c> uh</c><00:21:14.940><c> instead</c><00:21:15.240><c> of</c><00:21:15.299><c> like</c><00:21:15.480><c> a</c>

00:21:15.590 --> 00:21:15.600 align:start position:0%
Merkle trades uh instead of like a
 

00:21:15.600 --> 00:21:17.630 align:start position:0%
Merkle trades uh instead of like a
generic<00:21:15.960><c> one</c><00:21:16.140><c> and</c><00:21:16.620><c> your</c><00:21:16.799><c> implementation</c><00:21:17.280><c> does</c>

00:21:17.630 --> 00:21:17.640 align:start position:0%
generic one and your implementation does
 

00:21:17.640 --> 00:21:19.610 align:start position:0%
generic one and your implementation does
it<00:21:18.059><c> so</c><00:21:18.539><c> say</c><00:21:18.840><c> there's</c><00:21:19.140><c> some</c><00:21:19.320><c> really</c><00:21:19.440><c> big</c>

00:21:19.610 --> 00:21:19.620 align:start position:0%
it so say there's some really big
 

00:21:19.620 --> 00:21:21.289 align:start position:0%
it so say there's some really big
miracle<00:21:19.980><c> trades</c><00:21:20.340><c> in</c><00:21:20.460><c> in</c><00:21:20.640><c> the</c><00:21:20.820><c> beacon</c><00:21:21.120><c> state</c>

00:21:21.289 --> 00:21:21.299 align:start position:0%
miracle trades in in the beacon state
 

00:21:21.299 --> 00:21:23.570 align:start position:0%
miracle trades in in the beacon state
right<00:21:21.539><c> yeah</c><00:21:22.320><c> um</c><00:21:22.440><c> is</c><00:21:22.919><c> it</c><00:21:23.039><c> the</c><00:21:23.160><c> job</c><00:21:23.280><c> of</c><00:21:23.460><c> the</c>

00:21:23.570 --> 00:21:23.580 align:start position:0%
right yeah um is it the job of the
 

00:21:23.580 --> 00:21:25.130 align:start position:0%
right yeah um is it the job of the
implementation<00:21:24.059><c> to</c><00:21:24.360><c> kind</c><00:21:24.539><c> of</c><00:21:24.660><c> split</c><00:21:24.960><c> that</c>

00:21:25.130 --> 00:21:25.140 align:start position:0%
implementation to kind of split that
 

00:21:25.140 --> 00:21:27.230 align:start position:0%
implementation to kind of split that
Merkle<00:21:25.559><c> tree</c><00:21:25.679><c> up</c><00:21:25.919><c> into</c><00:21:26.160><c> smaller</c><00:21:26.640><c> subtrees</c>

00:21:27.230 --> 00:21:27.240 align:start position:0%
Merkle tree up into smaller subtrees
 

00:21:27.240 --> 00:21:30.950 align:start position:0%
Merkle tree up into smaller subtrees
that<00:21:27.720><c> fit</c><00:21:28.260><c> the</c><00:21:28.620><c> size</c><00:21:28.740><c> of</c><00:21:28.919><c> your</c><00:21:29.100><c> CPU</c><00:21:29.640><c> no</c><00:21:30.480><c> no</c><00:21:30.659><c> so</c>

00:21:30.950 --> 00:21:30.960 align:start position:0%
that fit the size of your CPU no no so
 

00:21:30.960 --> 00:21:32.990 align:start position:0%
that fit the size of your CPU no no so
the<00:21:31.140><c> the</c><00:21:31.260><c> so</c><00:21:31.860><c> you're</c><00:21:32.159><c> saying</c><00:21:32.400><c> if</c><00:21:32.580><c> you</c><00:21:32.880><c> have</c>

00:21:32.990 --> 00:21:33.000 align:start position:0%
the the so you're saying if you have
 

00:21:33.000 --> 00:21:35.210 align:start position:0%
the the so you're saying if you have
this<00:21:33.240><c> large</c><00:21:33.419><c> tree</c><00:21:33.840><c> if</c><00:21:34.440><c> if</c><00:21:34.620><c> it's</c><00:21:34.799><c> the</c><00:21:34.980><c> job</c><00:21:35.100><c> of</c>

00:21:35.210 --> 00:21:35.220 align:start position:0%
this large tree if if it's the job of
 

00:21:35.220 --> 00:21:36.590 align:start position:0%
this large tree if if it's the job of
the<00:21:35.340><c> implementation</c><00:21:35.820><c> in</c><00:21:36.059><c> splitting</c><00:21:36.480><c> into</c>

00:21:36.590 --> 00:21:36.600 align:start position:0%
the implementation in splitting into
 

00:21:36.600 --> 00:21:38.990 align:start position:0%
the implementation in splitting into
smaller<00:21:37.080><c> trees</c><00:21:37.380><c> no</c><00:21:37.559><c> no</c><00:21:37.740><c> this</c><00:21:38.039><c> this</c><00:21:38.220><c> is</c><00:21:38.460><c> this</c><00:21:38.760><c> is</c>

00:21:38.990 --> 00:21:39.000 align:start position:0%
smaller trees no no this this is this is
 

00:21:39.000 --> 00:21:41.270 align:start position:0%
smaller trees no no this this is this is
completely<00:21:39.360><c> orthogonal</c><00:21:40.260><c> to</c><00:21:40.380><c> that</c><00:21:40.500><c> so</c><00:21:41.039><c> what</c>

00:21:41.270 --> 00:21:41.280 align:start position:0%
completely orthogonal to that so what
 

00:21:41.280 --> 00:21:42.770 align:start position:0%
completely orthogonal to that so what
you<00:21:41.460><c> guys</c><00:21:41.520><c> are</c><00:21:41.700><c> doing</c><00:21:41.820><c> in</c><00:21:42.000><c> Lighthouse</c><00:21:42.419><c> is</c>

00:21:42.770 --> 00:21:42.780 align:start position:0%
you guys are doing in Lighthouse is
 

00:21:42.780 --> 00:21:44.930 align:start position:0%
you guys are doing in Lighthouse is
splitting<00:21:43.200><c> this</c><00:21:43.380><c> into</c><00:21:43.500><c> smaller</c><00:21:43.919><c> trees</c><00:21:44.340><c> and</c>

00:21:44.930 --> 00:21:44.940 align:start position:0%
splitting this into smaller trees and
 

00:21:44.940 --> 00:21:47.510 align:start position:0%
splitting this into smaller trees and
you<00:21:45.120><c> send</c><00:21:45.539><c> this</c><00:21:45.720><c> on</c><00:21:46.020><c> different</c><00:21:46.200><c> threads</c><00:21:46.679><c> to</c><00:21:47.220><c> to</c>

00:21:47.510 --> 00:21:47.520 align:start position:0%
you send this on different threads to to
 

00:21:47.520 --> 00:21:49.310 align:start position:0%
you send this on different threads to to
compute<00:21:48.299><c> them</c><00:21:48.360><c> in</c><00:21:48.480><c> parallel</c><00:21:48.780><c> this</c><00:21:49.260><c> is</c>

00:21:49.310 --> 00:21:49.320 align:start position:0%
compute them in parallel this is
 

00:21:49.320 --> 00:21:51.049 align:start position:0%
compute them in parallel this is
completely<00:21:49.620><c> different</c><00:21:49.799><c> you</c><00:21:50.159><c> just</c><00:21:50.340><c> pass</c><00:21:50.580><c> the</c>

00:21:51.049 --> 00:21:51.059 align:start position:0%
completely different you just pass the
 

00:21:51.059 --> 00:21:53.450 align:start position:0%
completely different you just pass the
entire<00:21:51.299><c> slot</c><00:21:51.720><c> so</c><00:21:51.960><c> big</c><00:21:52.200><c> Trace</c><00:21:52.620><c> is</c><00:21:52.799><c> the</c><00:21:53.039><c> big</c><00:21:53.220><c> gain</c>

00:21:53.450 --> 00:21:53.460 align:start position:0%
entire slot so big Trace is the big gain
 

00:21:53.460 --> 00:21:54.830 align:start position:0%
entire slot so big Trace is the big gain
for<00:21:53.640><c> this</c><00:21:53.760><c> you're</c><00:21:54.120><c> going</c><00:21:54.240><c> to</c><00:21:54.360><c> be</c><00:21:54.480><c> at</c><00:21:54.720><c> least</c>

00:21:54.830 --> 00:21:54.840 align:start position:0%
for this you're going to be at least
 

00:21:54.840 --> 00:21:56.570 align:start position:0%
for this you're going to be at least
hashing<00:21:55.260><c> four</c><00:21:55.440><c> times</c><00:21:55.559><c> faster</c><00:21:55.919><c> than</c><00:21:56.280><c> the</c>

00:21:56.570 --> 00:21:56.580 align:start position:0%
hashing four times faster than the
 

00:21:56.580 --> 00:21:58.250 align:start position:0%
hashing four times faster than the
standard<00:21:56.820><c> Library</c><00:21:57.059><c> you</c><00:21:57.480><c> just</c><00:21:57.600><c> pass</c><00:21:57.900><c> the</c>

00:21:58.250 --> 00:21:58.260 align:start position:0%
standard Library you just pass the
 

00:21:58.260 --> 00:22:00.470 align:start position:0%
standard Library you just pass the
entire<00:21:58.559><c> slice</c><00:21:58.919><c> like</c><00:21:59.580><c> all</c><00:21:59.820><c> of</c><00:21:59.940><c> the</c><00:22:00.059><c> slides</c><00:22:00.360><c> that</c>

00:22:00.470 --> 00:22:00.480 align:start position:0%
entire slice like all of the slides that
 

00:22:00.480 --> 00:22:02.930 align:start position:0%
entire slice like all of the slides that
you<00:22:00.600><c> of</c><00:22:00.720><c> the</c><00:22:00.900><c> bottom</c><00:22:01.140><c> slice</c><00:22:01.500><c> and</c><00:22:02.100><c> the</c><00:22:02.280><c> what</c>

00:22:02.930 --> 00:22:02.940 align:start position:0%
you of the bottom slice and the what
 

00:22:02.940 --> 00:22:05.270 align:start position:0%
you of the bottom slice and the what
what<00:22:03.299><c> this</c><00:22:03.600><c> thing</c><00:22:03.720><c> is</c><00:22:03.840><c> going</c><00:22:04.020><c> to</c><00:22:04.140><c> do</c><00:22:04.320><c> is</c><00:22:04.980><c> not</c>

00:22:05.270 --> 00:22:05.280 align:start position:0%
what this thing is going to do is not
 

00:22:05.280 --> 00:22:07.730 align:start position:0%
what this thing is going to do is not
split<00:22:06.000><c> into</c><00:22:06.120><c> subterris</c><00:22:06.900><c> what</c><00:22:07.320><c> the</c><00:22:07.500><c> thing</c><00:22:07.620><c> is</c>

00:22:07.730 --> 00:22:07.740 align:start position:0%
split into subterris what the thing is
 

00:22:07.740 --> 00:22:10.250 align:start position:0%
split into subterris what the thing is
going<00:22:07.919><c> to</c><00:22:07.980><c> do</c><00:22:08.100><c> is</c><00:22:08.280><c> grab</c><00:22:08.640><c> have</c><00:22:09.240><c> as</c><00:22:09.659><c> many</c><00:22:09.840><c> blocks</c>

00:22:10.250 --> 00:22:10.260 align:start position:0%
going to do is grab have as many blocks
 

00:22:10.260 --> 00:22:12.649 align:start position:0%
going to do is grab have as many blocks
as<00:22:10.500><c> possible</c><00:22:10.860><c> it</c><00:22:11.460><c> can</c><00:22:11.640><c> fit</c><00:22:11.880><c> in</c><00:22:12.120><c> your</c><00:22:12.240><c> registers</c>

00:22:12.649 --> 00:22:12.659 align:start position:0%
as possible it can fit in your registers
 

00:22:12.659 --> 00:22:14.630 align:start position:0%
as possible it can fit in your registers
and<00:22:13.320><c> then</c><00:22:13.380><c> just</c><00:22:13.559><c> go</c><00:22:13.799><c> to</c><00:22:13.860><c> the</c><00:22:14.039><c> next</c><00:22:14.159><c> chunk</c><00:22:14.460><c> and</c>

00:22:14.630 --> 00:22:14.640 align:start position:0%
and then just go to the next chunk and
 

00:22:14.640 --> 00:22:16.130 align:start position:0%
and then just go to the next chunk and
the<00:22:14.820><c> next</c><00:22:14.880><c> chunk</c><00:22:15.120><c> and</c><00:22:15.299><c> the</c><00:22:15.480><c> next</c><00:22:15.539><c> chunk</c><00:22:15.840><c> like</c>

00:22:16.130 --> 00:22:16.140 align:start position:0%
the next chunk and the next chunk like
 

00:22:16.140 --> 00:22:18.289 align:start position:0%
the next chunk and the next chunk like
this<00:22:16.320><c> so</c><00:22:16.860><c> it</c><00:22:16.980><c> doesn't</c><00:22:17.159><c> split</c><00:22:17.520><c> in</c><00:22:17.700><c> sub</c><00:22:17.880><c> trees</c>

00:22:18.289 --> 00:22:18.299 align:start position:0%
this so it doesn't split in sub trees
 

00:22:18.299 --> 00:22:21.110 align:start position:0%
this so it doesn't split in sub trees
okay<00:22:18.780><c> and</c><00:22:19.080><c> so</c><00:22:19.260><c> you</c><00:22:19.679><c> faded</c><00:22:20.100><c> all</c><00:22:20.460><c> of</c><00:22:20.640><c> the</c><00:22:20.760><c> leaves</c>

00:22:21.110 --> 00:22:21.120 align:start position:0%
okay and so you faded all of the leaves
 

00:22:21.120 --> 00:22:22.970 align:start position:0%
okay and so you faded all of the leaves
and<00:22:21.780><c> then</c><00:22:21.900><c> it</c><00:22:22.020><c> then</c><00:22:22.320><c> it</c><00:22:22.440><c> produces</c><00:22:22.799><c> the</c>

00:22:22.970 --> 00:22:22.980 align:start position:0%
and then it then it produces the
 

00:22:22.980 --> 00:22:24.669 align:start position:0%
and then it then it produces the
intermediate<00:22:23.520><c> level</c>

00:22:24.669 --> 00:22:24.679 align:start position:0%
intermediate level
 

00:22:24.679 --> 00:22:27.110 align:start position:0%
intermediate level
next<00:22:25.679><c> layer</c><00:22:25.980><c> and</c><00:22:26.280><c> then</c><00:22:26.340><c> you</c><00:22:26.460><c> just</c><00:22:26.580><c> feed</c><00:22:26.760><c> it</c><00:22:26.940><c> the</c>

00:22:27.110 --> 00:22:27.120 align:start position:0%
next layer and then you just feed it the
 

00:22:27.120 --> 00:22:29.149 align:start position:0%
next layer and then you just feed it the
next<00:22:27.240><c> layer</c><00:22:27.600><c> entirely</c><00:22:28.140><c> and</c><00:22:28.559><c> it</c><00:22:28.679><c> produces</c><00:22:29.039><c> the</c>

00:22:29.149 --> 00:22:29.159 align:start position:0%
next layer entirely and it produces the
 

00:22:29.159 --> 00:22:31.549 align:start position:0%
next layer entirely and it produces the
next<00:22:29.280><c> one</c><00:22:29.520><c> oh</c><00:22:30.120><c> yeah</c><00:22:30.360><c> okay</c><00:22:30.600><c> so</c><00:22:31.080><c> for</c><00:22:31.260><c> the</c><00:22:31.380><c> state</c>

00:22:31.549 --> 00:22:31.559 align:start position:0%
next one oh yeah okay so for the state
 

00:22:31.559 --> 00:22:33.289 align:start position:0%
next one oh yeah okay so for the state
so<00:22:31.980><c> you're</c><00:22:32.100><c> thinking</c><00:22:32.340><c> in</c><00:22:32.520><c> the</c><00:22:32.580><c> beacon</c><00:22:33.059><c> State</c>

00:22:33.289 --> 00:22:33.299 align:start position:0%
so you're thinking in the beacon State
 

00:22:33.299 --> 00:22:35.330 align:start position:0%
so you're thinking in the beacon State
for<00:22:33.720><c> the</c><00:22:33.900><c> state</c><00:22:34.020><c> this</c><00:22:34.380><c> is</c><00:22:34.559><c> incredibly</c><00:22:35.159><c> fast</c>

00:22:35.330 --> 00:22:35.340 align:start position:0%
for the state this is incredibly fast
 

00:22:35.340 --> 00:22:37.130 align:start position:0%
for the state this is incredibly fast
but<00:22:35.940><c> this</c><00:22:36.059><c> is</c><00:22:36.179><c> not</c><00:22:36.240><c> how</c><00:22:36.419><c> we</c><00:22:36.600><c> hash</c><00:22:36.840><c> the</c><00:22:37.020><c> state</c>

00:22:37.130 --> 00:22:37.140 align:start position:0%
but this is not how we hash the state
 

00:22:37.140 --> 00:22:39.110 align:start position:0%
but this is not how we hash the state
because<00:22:37.380><c> we</c><00:22:37.679><c> have</c><00:22:37.860><c> it</c><00:22:38.039><c> in</c><00:22:38.340><c> cashier</c><00:22:38.760><c> typically</c>

00:22:39.110 --> 00:22:39.120 align:start position:0%
because we have it in cashier typically
 

00:22:39.120 --> 00:22:41.210 align:start position:0%
because we have it in cashier typically
and<00:22:39.419><c> you</c><00:22:39.600><c> just</c><00:22:39.659><c> have</c><00:22:39.840><c> a</c><00:22:40.020><c> few</c><00:22:40.140><c> a</c><00:22:40.500><c> few</c><00:22:40.740><c> nodes</c><00:22:40.980><c> that</c>

00:22:41.210 --> 00:22:41.220 align:start position:0%
and you just have a few a few nodes that
 

00:22:41.220 --> 00:22:43.610 align:start position:0%
and you just have a few a few nodes that
you're<00:22:41.520><c> you're</c><00:22:41.820><c> you're</c><00:22:42.179><c> you're</c><00:22:42.360><c> changing</c><00:22:43.020><c> so</c>

00:22:43.610 --> 00:22:43.620 align:start position:0%
you're you're you're you're changing so
 

00:22:43.620 --> 00:22:46.850 align:start position:0%
you're you're you're you're changing so
when<00:22:44.039><c> you</c><00:22:44.220><c> hash</c><00:22:44.520><c> the</c><00:22:44.880><c> dirty</c><00:22:45.840><c> trees</c><00:22:46.140><c> the</c><00:22:46.380><c> dirty</c>

00:22:46.850 --> 00:22:46.860 align:start position:0%
when you hash the dirty trees the dirty
 

00:22:46.860 --> 00:22:47.630 align:start position:0%
when you hash the dirty trees the dirty
leaves

00:22:47.630 --> 00:22:47.640 align:start position:0%
leaves
 

00:22:47.640 --> 00:22:50.270 align:start position:0%
leaves
then<00:22:48.539><c> well</c><00:22:49.020><c> there's</c><00:22:49.440><c> two</c><00:22:49.679><c> things</c><00:22:49.860><c> that</c><00:22:50.039><c> happen</c>

00:22:50.270 --> 00:22:50.280 align:start position:0%
then well there's two things that happen
 

00:22:50.280 --> 00:22:51.590 align:start position:0%
then well there's two things that happen
so

00:22:51.590 --> 00:22:51.600 align:start position:0%
so
 

00:22:51.600 --> 00:22:53.330 align:start position:0%
so
sometimes<00:22:52.260><c> you</c><00:22:52.440><c> have</c><00:22:52.559><c> several</c><00:22:52.860><c> vendor</c>

00:22:53.330 --> 00:22:53.340 align:start position:0%
sometimes you have several vendor
 

00:22:53.340 --> 00:22:55.730 align:start position:0%
sometimes you have several vendor
consecutive<00:22:53.940><c> and</c><00:22:54.659><c> then</c><00:22:54.780><c> you</c><00:22:54.960><c> can</c><00:22:55.080><c> you</c><00:22:55.440><c> can</c><00:22:55.559><c> be</c>

00:22:55.730 --> 00:22:55.740 align:start position:0%
consecutive and then you can you can be
 

00:22:55.740 --> 00:22:57.950 align:start position:0%
consecutive and then you can you can be
smart<00:22:55.919><c> and</c><00:22:56.400><c> pass</c><00:22:56.580><c> this</c><00:22:57.000><c> consecutive</c><00:22:57.480><c> layer</c><00:22:57.840><c> to</c>

00:22:57.950 --> 00:22:57.960 align:start position:0%
smart and pass this consecutive layer to
 

00:22:57.960 --> 00:22:59.930 align:start position:0%
smart and pass this consecutive layer to
this<00:22:58.200><c> hash</c><00:22:58.500><c> or</c><00:22:59.159><c> you</c><00:22:59.340><c> can</c><00:22:59.400><c> just</c><00:22:59.520><c> use</c><00:22:59.760><c> whatever</c>

00:22:59.930 --> 00:22:59.940 align:start position:0%
this hash or you can just use whatever
 

00:22:59.940 --> 00:23:02.270 align:start position:0%
this hash or you can just use whatever
you're<00:23:00.240><c> using</c><00:23:00.539><c> now</c><00:23:00.780><c> just</c><00:23:01.140><c> crash</c><00:23:01.620><c> two</c><00:23:01.919><c> blocks</c>

00:23:02.270 --> 00:23:02.280 align:start position:0%
you're using now just crash two blocks
 

00:23:02.280 --> 00:23:04.010 align:start position:0%
you're using now just crash two blocks
at<00:23:02.400><c> a</c><00:23:02.520><c> time</c><00:23:02.640><c> you're</c><00:23:03.299><c> not</c><00:23:03.480><c> going</c><00:23:03.659><c> to</c><00:23:03.780><c> get</c><00:23:03.900><c> the</c>

00:23:04.010 --> 00:23:04.020 align:start position:0%
at a time you're not going to get the
 

00:23:04.020 --> 00:23:05.570 align:start position:0%
at a time you're not going to get the
factorization<00:23:04.559><c> impact</c><00:23:04.980><c> but</c><00:23:05.220><c> you're</c><00:23:05.340><c> going</c><00:23:05.460><c> to</c>

00:23:05.570 --> 00:23:05.580 align:start position:0%
factorization impact but you're going to
 

00:23:05.580 --> 00:23:07.970 align:start position:0%
factorization impact but you're going to
get<00:23:05.700><c> at</c><00:23:05.820><c> least</c><00:23:05.940><c> the</c><00:23:06.120><c> 20</c><00:23:06.299><c> of</c><00:23:06.780><c> the</c><00:23:06.900><c> hard</c><00:23:07.020><c> quality</c>

00:23:07.970 --> 00:23:07.980 align:start position:0%
get at least the 20 of the hard quality
 

00:23:07.980 --> 00:23:10.070 align:start position:0%
get at least the 20 of the hard quality
the<00:23:08.400><c> the</c><00:23:08.400><c> padding</c><00:23:08.940><c> block</c>

00:23:10.070 --> 00:23:10.080 align:start position:0%
the the padding block
 

00:23:10.080 --> 00:23:11.870 align:start position:0%
the the padding block
yeah<00:23:10.200><c> Okay</c><00:23:10.620><c> cool</c><00:23:10.919><c> so</c><00:23:11.100><c> I</c><00:23:11.400><c> guess</c><00:23:11.520><c> there's</c><00:23:11.700><c> maybe</c>

00:23:11.870 --> 00:23:11.880 align:start position:0%
yeah Okay cool so I guess there's maybe
 

00:23:11.880 --> 00:23:13.310 align:start position:0%
yeah Okay cool so I guess there's maybe
like<00:23:12.120><c> an</c><00:23:12.240><c> argument</c><00:23:12.480><c> for</c><00:23:12.720><c> maybe</c><00:23:12.960><c> it's</c><00:23:13.140><c> quite</c>

00:23:13.310 --> 00:23:13.320 align:start position:0%
like an argument for maybe it's quite
 

00:23:13.320 --> 00:23:14.930 align:start position:0%
like an argument for maybe it's quite
useful<00:23:13.559><c> for</c><00:23:13.740><c> small</c><00:23:13.919><c> trades</c>

00:23:14.930 --> 00:23:14.940 align:start position:0%
useful for small trades
 

00:23:14.940 --> 00:23:16.370 align:start position:0%
useful for small trades
um<00:23:15.000><c> you</c><00:23:15.179><c> don't</c><00:23:15.299><c> get</c><00:23:15.419><c> a</c><00:23:15.539><c> lot</c><00:23:15.600><c> from</c><00:23:15.780><c> caching</c><00:23:16.080><c> yeah</c>

00:23:16.370 --> 00:23:16.380 align:start position:0%
um you don't get a lot from caching yeah
 

00:23:16.380 --> 00:23:18.049 align:start position:0%
um you don't get a lot from caching yeah
it's<00:23:16.500><c> it's</c><00:23:16.679><c> not</c><00:23:17.100><c> really</c><00:23:17.280><c> useful</c><00:23:17.580><c> for</c><00:23:17.820><c> small</c>

00:23:18.049 --> 00:23:18.059 align:start position:0%
it's it's not really useful for small
 

00:23:18.059 --> 00:23:20.149 align:start position:0%
it's it's not really useful for small
trees<00:23:18.419><c> you</c><00:23:18.659><c> only</c><00:23:18.780><c> get</c><00:23:18.960><c> the</c><00:23:19.080><c> 20</c><00:23:19.260><c> of</c><00:23:19.740><c> the</c><00:23:19.860><c> padding</c>

00:23:20.149 --> 00:23:20.159 align:start position:0%
trees you only get the 20 of the padding
 

00:23:20.159 --> 00:23:23.149 align:start position:0%
trees you only get the 20 of the padding
block<00:23:20.340><c> yeah</c><00:23:20.820><c> it's</c><00:23:21.480><c> very</c><00:23:21.659><c> very</c><00:23:21.840><c> useful</c><00:23:22.320><c> on</c>

00:23:23.149 --> 00:23:23.159 align:start position:0%
block yeah it's very very useful on
 

00:23:23.159 --> 00:23:25.070 align:start position:0%
block yeah it's very very useful on
large<00:23:23.400><c> trees</c><00:23:23.820><c> and</c><00:23:24.000><c> here</c><00:23:24.120><c> large</c><00:23:24.360><c> means</c><00:23:24.780><c> more</c>

00:23:25.070 --> 00:23:25.080 align:start position:0%
large trees and here large means more
 

00:23:25.080 --> 00:23:26.750 align:start position:0%
large trees and here large means more
than<00:23:25.260><c> eight</c><00:23:25.380><c> blocks</c><00:23:25.740><c> so</c><00:23:26.100><c> anything</c><00:23:26.280><c> that</c><00:23:26.580><c> has</c>

00:23:26.750 --> 00:23:26.760 align:start position:0%
than eight blocks so anything that has
 

00:23:26.760 --> 00:23:29.270 align:start position:0%
than eight blocks so anything that has
depth<00:23:27.299><c> more</c><00:23:27.840><c> than</c><00:23:27.960><c> two</c><00:23:28.200><c> this</c><00:23:28.740><c> is</c><00:23:28.860><c> already</c><00:23:29.039><c> four</c>

00:23:29.270 --> 00:23:29.280 align:start position:0%
depth more than two this is already four
 

00:23:29.280 --> 00:23:30.410 align:start position:0%
depth more than two this is already four
times<00:23:29.460><c> faster</c>

00:23:30.410 --> 00:23:30.420 align:start position:0%
times faster
 

00:23:30.420 --> 00:23:34.579 align:start position:0%
times faster
[Applause]

