- AB9FD79FE71C8BA5C6015B658E2FB609449DDF8C717A0C97C3BA88E7B7C7E8172C00D93637F7697F7D040615854F6FA5865BA04AB3AEA90B33CDF129F4F5589E
+ 806F951DDBC64F49D4DE41CD05DA14E76229886211FE617C996B177B6F6EF826429F64756E8341448CAE2E536C6E34CC614E46860CEF6324B6C8B7F645517AFC
eucrypt/smg_keccak/smg_oaep.adb
(35 . 11)(35 . 11)
397
398 procedure HashKeccak( Input : in String;
399 Output : out String;
400 Block_Len : in Keccak_Rate := Default_Bitrate) is
401 BIn : Bitstream( 0 .. Input'Length * 8 - 1 );
402 BOut : Bitstream( 0 .. Output'Length * 8 - 1 );
403 Block_Len : in Keccak_Rate := Default_Byterate) is
404 BIn : Bytestream( 0 .. Input'Length - 1 );
405 BOut : Bytestream( 0 .. Output'Length - 1 );
406 begin
407 ToBitstream( Input, BIn);
408 ToBytestream( Input, BIn);
409 Sponge( BIn, BOut, Block_Len);
410 ToString( BOut, Output );
411 end HashKeccak;
(52 . 7)(52 . 7)
413 AdaLenOut : Natural := Natural( LenOut );
414 InStr : String( 1 .. AdaLenIn ) := (others => '0');
415 OutStr : String( 1 .. AdaLenOut ) := (others => '0');
416 Block_Len : Keccak_Rate := Default_Bitrate;
417 Block_Len : Keccak_Rate := Default_Byterate;
418 begin
419 -- Interfaces.C.To_Ada( Input, InStr, AdaLenIn );
420 Char_Array_To_String( Input, AdaLenIn, InStr );
(62 . 44)(62 . 21)
422 end Hash;
423
424 -- conversion between types
425 procedure ToString(B: in Bitstream; S: out String ) is
426 N : Natural;
427 Pos : Natural;
428 procedure ToString(B: in Bytestream; S: out String ) is
429 begin
430 Pos := B'First;
431 for I in S'Range loop
432 N := Natural( B( Pos ) ) +
433 Natural( B( Pos + 1 ) ) * 2 +
434 Natural( B( Pos + 2 ) ) * 4 +
435 Natural( B( Pos + 3 ) ) * 8 +
436 Natural( B( Pos + 4 ) ) * 16 +
437 Natural( B( Pos + 5 ) ) * 32 +
438 Natural( B( Pos + 6 ) ) * 64 +
439 Natural( B( Pos + 7 ) ) * 128;
440 Pos := Pos + 8;
441 S( I ) := Character'Val( N );
442 for I in 0..B'Length-1 loop
443 S(S'First + I) := Character'Val(B(B'First+I));
444 end loop;
445 end ToString;
446
447 procedure ToBitstream(S: in String; B: out Bitstream ) is
448 procedure ToBytestream(S: in String; B: out Bytestream ) is
449 V : Unsigned_8;
450 Pos : Natural;
451 begin
452 Pos := B'First;
453 for C of S loop
454 V := Character'Pos( C );
455 B( Pos ) := Bit( V and 1 );
456 B( Pos + 1 ) := Bit( Shift_Right( V, 1 ) and 1 );
457 B( Pos + 2 ) := Bit( Shift_Right( V, 2 ) and 1 );
458 B( Pos + 3 ) := Bit( Shift_Right( V, 3 ) and 1 );
459 B( Pos + 4 ) := Bit( Shift_Right( V, 4 ) and 1 );
460 B( Pos + 5 ) := Bit( Shift_Right( V, 5 ) and 1 );
461 B( Pos + 6 ) := Bit( Shift_Right( V, 6 ) and 1 );
462 B( Pos + 7 ) := Bit( Shift_Right( V, 7 ) and 1 );
463
464 Pos := Pos + 8;
465 for I in 0..S'Length -1 loop
466 B(B'First+I) := Character'Pos( S(S'First + I) );
467 end loop;
468 end ToBitstream;
469 end ToBytestream;
470
471 -- padding & formatting of maximum 1960 bits of the given String
472 -- uses TMSR's OAEP schema: