@@ -24,15 +24,22 @@ pub struct Poly1305 {
24
24
impl Poly1305 {
25
25
pub fn new ( key : & [ u8 ] ) -> Poly1305 {
26
26
assert ! ( key. len( ) == 32 ) ;
27
- let mut poly =
28
- Poly1305 { r : [ 0u32 ; 5 ] , h : [ 0u32 ; 5 ] , pad : [ 0u32 ; 4 ] , leftover : 0 , buffer : [ 0u8 ; 16 ] , finalized : false } ;
27
+ let mut poly = Poly1305 {
28
+ r : [ 0u32 ; 5 ] ,
29
+ h : [ 0u32 ; 5 ] ,
30
+ pad : [ 0u32 ; 4 ] ,
31
+ leftover : 0 ,
32
+ buffer : [ 0u8 ; 16 ] ,
33
+ finalized : false ,
34
+ } ;
29
35
30
36
// r &= 0xffffffc0ffffffc0ffffffc0fffffff
31
37
poly. r [ 0 ] = ( u32:: from_le_bytes ( key[ 0 ..4 ] . try_into ( ) . expect ( "len is 4" ) ) ) & 0x3ffffff ;
32
38
poly. r [ 1 ] = ( u32:: from_le_bytes ( key[ 3 ..7 ] . try_into ( ) . expect ( "len is 4" ) ) >> 2 ) & 0x3ffff03 ;
33
39
poly. r [ 2 ] = ( u32:: from_le_bytes ( key[ 6 ..10 ] . try_into ( ) . expect ( "len is 4" ) ) >> 4 ) & 0x3ffc0ff ;
34
40
poly. r [ 3 ] = ( u32:: from_le_bytes ( key[ 9 ..13 ] . try_into ( ) . expect ( "len is 4" ) ) >> 6 ) & 0x3f03fff ;
35
- poly. r [ 4 ] = ( u32:: from_le_bytes ( key[ 12 ..16 ] . try_into ( ) . expect ( "len is 4" ) ) >> 8 ) & 0x00fffff ;
41
+ poly. r [ 4 ] =
42
+ ( u32:: from_le_bytes ( key[ 12 ..16 ] . try_into ( ) . expect ( "len is 4" ) ) >> 8 ) & 0x00fffff ;
36
43
37
44
poly. pad [ 0 ] = u32:: from_le_bytes ( key[ 16 ..20 ] . try_into ( ) . expect ( "len is 4" ) ) ;
38
45
poly. pad [ 1 ] = u32:: from_le_bytes ( key[ 20 ..24 ] . try_into ( ) . expect ( "len is 4" ) ) ;
@@ -272,22 +279,28 @@ mod test {
272
279
#[ test]
273
280
fn test_nacl_vector ( ) {
274
281
let key = [
275
- 0xee , 0xa6 , 0xa7 , 0x25 , 0x1c , 0x1e , 0x72 , 0x91 , 0x6d , 0x11 , 0xc2 , 0xcb , 0x21 , 0x4d , 0x3c , 0x25 , 0x25 , 0x39 ,
276
- 0x12 , 0x1d , 0x8e , 0x23 , 0x4e , 0x65 , 0x2d , 0x65 , 0x1f , 0xa4 , 0xc8 , 0xcf , 0xf8 , 0x80 ,
282
+ 0xee , 0xa6 , 0xa7 , 0x25 , 0x1c , 0x1e , 0x72 , 0x91 , 0x6d , 0x11 , 0xc2 , 0xcb , 0x21 , 0x4d ,
283
+ 0x3c , 0x25 , 0x25 , 0x39 , 0x12 , 0x1d , 0x8e , 0x23 , 0x4e , 0x65 , 0x2d , 0x65 , 0x1f , 0xa4 ,
284
+ 0xc8 , 0xcf , 0xf8 , 0x80 ,
277
285
] ;
278
286
279
287
let msg = [
280
- 0x8e , 0x99 , 0x3b , 0x9f , 0x48 , 0x68 , 0x12 , 0x73 , 0xc2 , 0x96 , 0x50 , 0xba , 0x32 , 0xfc , 0x76 , 0xce , 0x48 , 0x33 ,
281
- 0x2e , 0xa7 , 0x16 , 0x4d , 0x96 , 0xa4 , 0x47 , 0x6f , 0xb8 , 0xc5 , 0x31 , 0xa1 , 0x18 , 0x6a , 0xc0 , 0xdf , 0xc1 , 0x7c ,
282
- 0x98 , 0xdc , 0xe8 , 0x7b , 0x4d , 0xa7 , 0xf0 , 0x11 , 0xec , 0x48 , 0xc9 , 0x72 , 0x71 , 0xd2 , 0xc2 , 0x0f , 0x9b , 0x92 ,
283
- 0x8f , 0xe2 , 0x27 , 0x0d , 0x6f , 0xb8 , 0x63 , 0xd5 , 0x17 , 0x38 , 0xb4 , 0x8e , 0xee , 0xe3 , 0x14 , 0xa7 , 0xcc , 0x8a ,
284
- 0xb9 , 0x32 , 0x16 , 0x45 , 0x48 , 0xe5 , 0x26 , 0xae , 0x90 , 0x22 , 0x43 , 0x68 , 0x51 , 0x7a , 0xcf , 0xea , 0xbd , 0x6b ,
285
- 0xb3 , 0x73 , 0x2b , 0xc0 , 0xe9 , 0xda , 0x99 , 0x83 , 0x2b , 0x61 , 0xca , 0x01 , 0xb6 , 0xde , 0x56 , 0x24 , 0x4a , 0x9e ,
286
- 0x88 , 0xd5 , 0xf9 , 0xb3 , 0x79 , 0x73 , 0xf6 , 0x22 , 0xa4 , 0x3d , 0x14 , 0xa6 , 0x59 , 0x9b , 0x1f , 0x65 , 0x4c , 0xb4 ,
288
+ 0x8e , 0x99 , 0x3b , 0x9f , 0x48 , 0x68 , 0x12 , 0x73 , 0xc2 , 0x96 , 0x50 , 0xba , 0x32 , 0xfc ,
289
+ 0x76 , 0xce , 0x48 , 0x33 , 0x2e , 0xa7 , 0x16 , 0x4d , 0x96 , 0xa4 , 0x47 , 0x6f , 0xb8 , 0xc5 ,
290
+ 0x31 , 0xa1 , 0x18 , 0x6a , 0xc0 , 0xdf , 0xc1 , 0x7c , 0x98 , 0xdc , 0xe8 , 0x7b , 0x4d , 0xa7 ,
291
+ 0xf0 , 0x11 , 0xec , 0x48 , 0xc9 , 0x72 , 0x71 , 0xd2 , 0xc2 , 0x0f , 0x9b , 0x92 , 0x8f , 0xe2 ,
292
+ 0x27 , 0x0d , 0x6f , 0xb8 , 0x63 , 0xd5 , 0x17 , 0x38 , 0xb4 , 0x8e , 0xee , 0xe3 , 0x14 , 0xa7 ,
293
+ 0xcc , 0x8a , 0xb9 , 0x32 , 0x16 , 0x45 , 0x48 , 0xe5 , 0x26 , 0xae , 0x90 , 0x22 , 0x43 , 0x68 ,
294
+ 0x51 , 0x7a , 0xcf , 0xea , 0xbd , 0x6b , 0xb3 , 0x73 , 0x2b , 0xc0 , 0xe9 , 0xda , 0x99 , 0x83 ,
295
+ 0x2b , 0x61 , 0xca , 0x01 , 0xb6 , 0xde , 0x56 , 0x24 , 0x4a , 0x9e , 0x88 , 0xd5 , 0xf9 , 0xb3 ,
296
+ 0x79 , 0x73 , 0xf6 , 0x22 , 0xa4 , 0x3d , 0x14 , 0xa6 , 0x59 , 0x9b , 0x1f , 0x65 , 0x4c , 0xb4 ,
287
297
0x5a , 0x74 , 0xe3 , 0x55 , 0xa5 ,
288
298
] ;
289
299
290
- let expected = [ 0xf3 , 0xff , 0xc7 , 0x70 , 0x3f , 0x94 , 0x00 , 0xe5 , 0x2a , 0x7d , 0xfb , 0x4b , 0x3d , 0x33 , 0x05 , 0xd9 ] ;
300
+ let expected = [
301
+ 0xf3 , 0xff , 0xc7 , 0x70 , 0x3f , 0x94 , 0x00 , 0xe5 , 0x2a , 0x7d , 0xfb , 0x4b , 0x3d , 0x33 ,
302
+ 0x05 , 0xd9 ,
303
+ ] ;
291
304
292
305
let mut mac = [ 0u8 ; 16 ] ;
293
306
poly1305 ( & key, & msg, & mut mac) ;
@@ -312,25 +325,35 @@ mod test {
312
325
#[ test]
313
326
fn donna_self_test ( ) {
314
327
let wrap_key = [
315
- 0x02 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
328
+ 0x02 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
316
329
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
330
+ 0x00 , 0x00 , 0x00 , 0x00 ,
317
331
] ;
318
332
319
- let wrap_msg = [ 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff ] ;
333
+ let wrap_msg = [
334
+ 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff ,
335
+ 0xff , 0xff ,
336
+ ] ;
320
337
321
- let wrap_mac = [ 0x03 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ] ;
338
+ let wrap_mac = [
339
+ 0x03 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
340
+ 0x00 , 0x00 ,
341
+ ] ;
322
342
323
343
let mut mac = [ 0u8 ; 16 ] ;
324
344
poly1305 ( & wrap_key, & wrap_msg, & mut mac) ;
325
345
assert_eq ! ( & mac[ ..] , & wrap_mac[ ..] ) ;
326
346
327
347
let total_key = [
328
- 0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x06 , 0x07 , 0xff , 0xfe , 0xfd , 0xfc , 0xfb , 0xfa , 0xf9 , 0xff , 0xff , 0xff , 0xff ,
329
- 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0x00 , 0x00 , 0x00 , 0x00 ,
348
+ 0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x06 , 0x07 , 0xff , 0xfe , 0xfd , 0xfc , 0xfb , 0xfa , 0xf9 ,
349
+ 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff ,
350
+ 0x00 , 0x00 , 0x00 , 0x00 ,
330
351
] ;
331
352
332
- let total_mac =
333
- [ 0x64 , 0xaf , 0xe2 , 0xe8 , 0xd6 , 0xad , 0x7b , 0xbd , 0xd2 , 0x87 , 0xf9 , 0x7c , 0x44 , 0x62 , 0x3d , 0x39 ] ;
353
+ let total_mac = [
354
+ 0x64 , 0xaf , 0xe2 , 0xe8 , 0xd6 , 0xad , 0x7b , 0xbd , 0xd2 , 0x87 , 0xf9 , 0x7c , 0x44 , 0x62 ,
355
+ 0x3d , 0x39 ,
356
+ ] ;
334
357
335
358
let mut tpoly = Poly1305 :: new ( & total_key) ;
336
359
for i in 0 ..256 {
@@ -349,13 +372,19 @@ mod test {
349
372
// from http://tools.ietf.org/html/draft-agl-tls-chacha20poly1305-04
350
373
let key = b"this is 32-byte key for Poly1305" ;
351
374
let msg = [ 0u8 ; 32 ] ;
352
- let expected = [ 0x49 , 0xec , 0x78 , 0x09 , 0x0e , 0x48 , 0x1e , 0xc6 , 0xc2 , 0x6b , 0x33 , 0xb9 , 0x1c , 0xcc , 0x03 , 0x07 ] ;
375
+ let expected = [
376
+ 0x49 , 0xec , 0x78 , 0x09 , 0x0e , 0x48 , 0x1e , 0xc6 , 0xc2 , 0x6b , 0x33 , 0xb9 , 0x1c , 0xcc ,
377
+ 0x03 , 0x07 ,
378
+ ] ;
353
379
let mut mac = [ 0u8 ; 16 ] ;
354
380
poly1305 ( key, & msg, & mut mac) ;
355
381
assert_eq ! ( & mac[ ..] , & expected[ ..] ) ;
356
382
357
383
let msg = b"Hello world!" ;
358
- let expected = [ 0xa6 , 0xf7 , 0x45 , 0x00 , 0x8f , 0x81 , 0xc9 , 0x16 , 0xa2 , 0x0d , 0xcc , 0x74 , 0xee , 0xf2 , 0xb2 , 0xf0 ] ;
384
+ let expected = [
385
+ 0xa6 , 0xf7 , 0x45 , 0x00 , 0x8f , 0x81 , 0xc9 , 0x16 , 0xa2 , 0x0d , 0xcc , 0x74 , 0xee , 0xf2 ,
386
+ 0xb2 , 0xf0 ,
387
+ ] ;
359
388
poly1305 ( key, msg, & mut mac) ;
360
389
assert_eq ! ( & mac[ ..] , & expected[ ..] ) ;
361
390
}
0 commit comments