Browse Source

Merge commit '190022e7600cb2f63dcbe19b59f9fff3df6b5053' as 'strobe'

mbed-sx1276
John-Mark Gurney 3 years ago
parent
commit
c2f97d55bb
60 changed files with 26381 additions and 0 deletions
  1. +24
    -0
      strobe/HISTORY.txt
  2. +21
    -0
      strobe/LICENSE.txt
  3. +56
    -0
      strobe/Makefile
  4. +90
    -0
      strobe/README.txt
  5. +118
    -0
      strobe/keccak_f.c.inc
  6. +64
    -0
      strobe/python/Makefile
  7. +108
    -0
      strobe/python/Strobe/ControlWord.py
  8. +264
    -0
      strobe/python/Strobe/Keccak.py
  9. +164
    -0
      strobe/python/Strobe/Strobe.py
  10. +127
    -0
      strobe/python/Strobe/StrobeCShake.py
  11. +99
    -0
      strobe/python/Strobe/StrobeCWrapper.py
  12. +429
    -0
      strobe/python/Strobe/StrobeFancy.py
  13. +74
    -0
      strobe/python/Strobe/Test/Concurrence.py
  14. +149
    -0
      strobe/python/Strobe/Test/Sha3vs.py
  15. +0
    -0
      strobe/python/Strobe/Test/__init__.py
  16. +191
    -0
      strobe/python/Strobe/Toy25519.py
  17. +1
    -0
      strobe/python/Strobe/__init__.py
  18. +408
    -0
      strobe/python/kat/SHA3_224LongMsg.rsp
  19. +309
    -0
      strobe/python/kat/SHA3_224Monte.rsp
  20. +588
    -0
      strobe/python/kat/SHA3_224ShortMsg.rsp
  21. +408
    -0
      strobe/python/kat/SHA3_256LongMsg.rsp
  22. +310
    -0
      strobe/python/kat/SHA3_256Monte.rsp
  23. +555
    -0
      strobe/python/kat/SHA3_256ShortMsg.rsp
  24. +408
    -0
      strobe/python/kat/SHA3_384LongMsg.rsp
  25. +310
    -0
      strobe/python/kat/SHA3_384Monte.rsp
  26. +427
    -0
      strobe/python/kat/SHA3_384ShortMsg.rsp
  27. +408
    -0
      strobe/python/kat/SHA3_512LongMsg.rsp
  28. +310
    -0
      strobe/python/kat/SHA3_512Monte.rsp
  29. +299
    -0
      strobe/python/kat/SHA3_512ShortMsg.rsp
  30. +408
    -0
      strobe/python/kat/SHAKE128LongMsg.rsp
  31. +411
    -0
      strobe/python/kat/SHAKE128Monte.rsp
  32. +1356
    -0
      strobe/python/kat/SHAKE128ShortMsg.rsp
  33. +5639
    -0
      strobe/python/kat/SHAKE128VariableOut.rsp
  34. +408
    -0
      strobe/python/kat/SHAKE256LongMsg.rsp
  35. +411
    -0
      strobe/python/kat/SHAKE256Monte.rsp
  36. +1100
    -0
      strobe/python/kat/SHAKE256ShortMsg.rsp
  37. +6239
    -0
      strobe/python/kat/SHAKE256VariableOut.rsp
  38. BIN
      strobe/python/kat/sha-3bytetestvectors.zip
  39. BIN
      strobe/python/kat/shakebytetestvectors.zip
  40. +471
    -0
      strobe/strobe.c
  41. +420
    -0
      strobe/strobe.h
  42. +183
    -0
      strobe/strobe_config.h
  43. +373
    -0
      strobe/test_strobe.c
  44. +91
    -0
      strobe/test_x25519.c
  45. +25
    -0
      strobe/www/code/index.html
  46. +103
    -0
      strobe/www/examples/aead/index.html
  47. +21
    -0
      strobe/www/examples/index.html
  48. +80
    -0
      strobe/www/index.html
  49. +39
    -0
      strobe/www/papers/index.html
  50. BIN
      strobe/www/papers/rwc2017-animations.pdf
  51. BIN
      strobe/www/papers/rwc2017-no-animations.pdf
  52. BIN
      strobe/www/papers/strobe-20170103.pdf
  53. BIN
      strobe/www/papers/strobe-20170130.pdf
  54. BIN
      strobe/www/papers/strobe-20191114.pdf
  55. +1
    -0
      strobe/www/papers/strobe-latest.pdf
  56. +1058
    -0
      strobe/www/specs/index.html
  57. BIN
      strobe/www/strobe-20170103.pdf
  58. +260
    -0
      strobe/www/style.css
  59. +437
    -0
      strobe/x25519.c
  60. +128
    -0
      strobe/x25519.h

+ 24
- 0
strobe/HISTORY.txt View File

@@ -0,0 +1,24 @@
2017-01-24:
Realized that cSHAKE S is a bit string, so its length is 12*8 and not 12.
Informally tested against someone else's cSHAKE test vectors, so at this
point it might actually be right.
Spec bump to 1.0.2.
2017-01-06:
Adjust, hopefully, to accommodate changes between NIST cSHAKE (SP 800-185)
draft and release.

Spec bump to 1.0.1.

2016-12-30:
Spec bump to 1.0.0. Public release.
The framework *code* (as opposed to the spec it implements) currently
doesn't have a version number and should be considered alpha-quality
software.

2016-12-06:
Release version 0.9.1. This isn't a full public release yet, because I
need to get legal approval for that.

+ 21
- 0
strobe/LICENSE.txt View File

@@ -0,0 +1,21 @@
The MIT License (MIT)

Copyright (c) 2015-2016 Cryptography Research, Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

+ 56
- 0
strobe/Makefile View File

@@ -0,0 +1,56 @@
# Copyright (c) 2015-2016 Cryptography Research, Inc.
# Author: Mike Hamburg
# Description: STROBE Makefile. for
CC= gcc
ARMCC= arm-none-eabi-gcc -fstack-usage -DNDEBUG
CFLAGS= -std=c11 -Os -Wall -Wextra -Werror $(XCFLAGS)
ARMLDFLAGS= -lc -specs=rdimon.specs
ARMTARGET= -mcpu=cortex-m4 -mthumb -DSTROBE_SINGLE_THREAD=1

.PHONY: all todo clean size-arm test-arm test-native test-strobe test-connection

all: build/test_x25519 build/test_x25519.arm build/test_strobe

build/timestamp:
mkdir build
touch $@

build/%.arm.o: %.c build/timestamp *.h Makefile
$(ARMCC) $(CFLAGS) $(ARMTARGET) -o $@ -c $<

build/%.o: %.c build/timestamp *.h Makefile
$(CC) $(CFLAGS) -o $@ -c $<

build/test_x25519.arm: build/x25519.arm.o build/test_x25519.arm.o
$(ARMCC) $(ARMTARGET) -o $@ $^ $(ARMLDFLAGS)

build/test_x25519: build/x25519.o build/test_x25519.o
$(CC) $(TARGET) -o $@ $^ $(LDFLAGS)
test-strobe: build/test_strobe
build/test_strobe: build/strobe.o build/x25519.o build/test_strobe.o
$(CC) $(TARGET) -o $@ $^ $(LDFLAGS)

size-arm: build/test_x25519.arm
size build/x25519.arm.o
cat build/x25519.arm.su || true
nm --size build/x25519.arm.o | perl -pe 's/[0-9a-f]+/hex $&/e'
test-arm: size-arm
time ./build/test_x25519.arm

test-native: build/test_x25519
build/test_x25519
test-connection: build/test_strobe
./$< --keygen > build/keys
sh -c "`head -n 1 build/keys`" > /dev/null &
sleep 1
sh -c "`tail -n 1 build/keys`"
todo::
@egrep --color 'TODO|FIXME|HACK|XXX|(\bBUG\b)|WTF|PERF' *.c *.h arm/*.inc
clean::
rm -fr build release keys

+ 90
- 0
strobe/README.txt View File

@@ -0,0 +1,90 @@
STROBE protocol framework

This is a development release of the STROBE framework. Although the
specification of the framework is at release level (1.0.0), the code is
development-quality and not yet ready for production use.

STROBE's framework spec versioning (not software versioning) is a little
bit funny. Every protocol hashes the spec version into the cryptographic
state, so any change to the spec version string breaks interoperability.
However, minor and patch revisions shouldn't break application
compatibility, so protocol specifications that make sense with 1.0.0
should also work with 1.0.1 and 1.1.0.

TODO: Update this README to include worthwhile documentation and use cases
for STROBE.

#############
Side channels
#############

The STROBE code is designed to resist timing side-channels that would
recover secret keys and messages. Obviously, timing is affected by other
variables such as message lengths.

The compact X25519 code is designed to resist timing side-channels, including
attacks on timing, caching, and branch prediction. However, the code
is incomplete in that regard, and should be tested on your particular CPU
and compiler. This warning is mainly in regard to embedded or old processors
such as the Cortex-M0, Cortex-M3, 80386, 80486, Via Nano 2000, PowerPC G3,
PowerPC G4, and RISC-V Rocket. These processors have a multiplication
instruction which takes a variable amount of time depending on its operands.
Since X25519 uses multiplication on sensitive data, some of that data will
leak to an attacker who can observe timing information. There are per-CPU
workarounds for this problem, but none of them are yet included in STROBE's
X25519 implementation.

Newer CPUs such as the Cortex-M4 and higher, and modern X86 processors, should
be safe. However, the test suite does not currently test resistance to timing
attacks (TODO).

On vulnerable processors, I expect that ephemeral Curve25519 is safe, and that
signature verification leaks information that's public in most threat models
(eg, the signer, signature and hashed message). Signing and long-term X25519
are probably vulnerable to key compromise.

I would like to eventually place a warning on the X25519 code for this, but
there are so many CPUs affected that it would be difficult to test the warning
code.

None of this code is designed to resist physically invasive attacks such as
power side channels, electromagnetic side channels, or fault attacks.

Remember of course that this is alpha-quality software, and probably contains
bugs which are more serious than timing attacks.

#############
Mailing lists
#############

If you use STROBE, please subscribe to at least the strobe-security mailing
list:
strobe-security@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/strobe-security

This mailing list is moderated and low-volume. It will be used only to
announce security issues in STROBE, should they arise.
You may also be interested in the strobe-announce and strobe-discuss
mailing lists.

strobe-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/strobe-discuss

strobe-announce@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/strobe-announce

###########################
Export control notification
###########################

Downloading of this software may constitute an export or re-export of
cryptographic software from the United States of America. The U.S.
government prohibits export of encryption source code to certain countries
and individuals, including, but not limited to, the countries of Cuba, Iran,
North Korea, Sudan, Syria, and residents and nationals of those countries.
Other countries may also have restrictions on the import, possession, use,
and/or re-export to another country, of encryption software. BEFORE using
any encryption software, please check your country's laws, regulations and
policies concerning the import, possession, or use, and re-export of
encryption software, to see if this is permitted.

+ 118
- 0
strobe/keccak_f.c.inc View File

@@ -0,0 +1,118 @@
/**
* @cond internal
* @file keccak_f.c.inc
* @copyright
* Copyright (c) 2015-2016 Cryptography Research, Inc. \n
* Released under the MIT License. See LICENSE.txt for license information.
*
* Loosely based on CC0 implementations of Keccak-F:
* Keccak-Tiny:
* David Leon Gil
* TweetFIPS202:
* Dan J Bernstein
* Peter Schwabe
* Gilles van Assche
*
* @author Mike Hamburg
*
* @brief Keccak-f[n] implementation. Designed to be included in another C
* file, so no headers.
*/

/* Could lose this to save size, maybe, depends on arch */
#ifndef STROBE_OPT_RC_TABLE
#define STROBE_OPT_RC_TABLE 1
#endif

/* Helper macros to unroll the permutation. */
#define REPEAT5(e) e e e e e
#if STROBE_OPT_FOR_SIZE // Size + 0 bytes, speed x 1/2
# define FOR51(v, e) v = 0; REPEAT5(e; v += 1;)
# define FOR55(v, e) for (v=0; v<25; v+= 5) { e; }
# define REPEAT24(e) {int _j=0; for (_j=0; _j<24; _j++) { e }}
#elif STROBE_OPT_FOR_SPEED // Size + 600 bytes, speed x1
# define FOR51(v, e) v = 0; REPEAT5(e; v += 1;)
# define FOR55(v, e) v = 0; REPEAT5(e; v += 5;)
# define REPEAT24(e) e e e e e e e e e e e e e e e e e e e e e e e e
#elif STROBE_OPT_FOR_SIZE_AGGRESSIVE // Terrible. Actually makes things bigger
# define FOR51(v, e) for (v=0; v<5; v++) { e; }
# define FOR55(v, e) for (v=0; v<25; v+= 5) { e; }
# define REPEAT24(e) {int _j=0; for (_j=0; _j<24; _j++) { e }}
#else // Size + 100 bytes, speed x 3/4
# define FOR51(v, e) v = 0; REPEAT5(e; v += 1;)
# define FOR55(v, e) for (v=0; v<25; v+= 5) { e; }
# define REPEAT24(e) e e e e e e e e e e e e e e e e e e e e e e e e
#endif

#if STROBE_INTEROP_F_BITS == 1600
#define NROUNDS 24
#elif STROBE_INTEROP_F_BITS == 800
#define NROUNDS 22
#elif STROBE_INTEROP_F_BITS == 400
#define NROUNDS 20
#elif sSTROBE_INTEROP_F_BITS == 200
#define NROUNDS 18
#else
#error "Only implementing KeccakF[200,400,800,1600]'"
#endif

/** Rotate left */
static inline kword_t rol(kword_t x, int s) {
static const int WBITS = 8*sizeof(kword_t);
s %= WBITS;
return (x << s) | (x >> (WBITS - s));
}

/*** The keccak-f[] permutation ***/
static void keccak_f(kdomain_s *state) {
const uint8_t pi[24] = {
10, 7, 11, 17, 18, 3, 5, 16, 8, 21, 24, 4,
15, 23, 19, 13, 12, 2, 20, 14, 22, 9, 6, 1
};

#define RC_B(x,n) ((((x##ull)>>n)&1)<<((1<<n)-1))
#define RC_X(x) ((kword_t)(RC_B(x,0)|RC_B(x,1)|RC_B(x,2)|RC_B(x,3)|RC_B(x,4)|RC_B(x,5)|RC_B(x,6)))
const kword_t RC[NROUNDS] = {
#if NROUNDS >= 24
RC_X(0x74), RC_X(0x21),
#endif
#if NROUNDS >= 22
RC_X(0x58), RC_X(0x79),
#endif
#if NROUNDS >= 20
RC_X(0x66), RC_X(0x16),
#endif
RC_X(0x48), RC_X(0x52), RC_X(0x53), RC_X(0x5d), RC_X(0x4f), RC_X(0x3f),
RC_X(0x26), RC_X(0x35), RC_X(0x0c), RC_X(0x0e), RC_X(0x55), RC_X(0x79),
RC_X(0x21), RC_X(0x1f), RC_X(0x70), RC_X(0x5e), RC_X(0x1a), RC_X(0x01)
};

kword_t* a = state->w;
kword_t b[5] = {0}, t, u;
unsigned int x, y;
int i;

for (i=0; i<25; i++) a[i] = eswap_letoh(a[i]);

for (i = NROUNDS-1; i >=0; i--) {
// Theta
FOR51(x, b[x] = 0;)
FOR55(y, FOR51(x, b[x] ^= a[x + y];))
FOR55(y, FOR51(x,
a[y + x] ^= b[(x + 4) % 5] ^ rol(b[(x + 1) % 5], 1);
))
// Rho and pi
t = a[1];
x = y = 0;
REPEAT24(u = a[pi[x]]; y += x+1; a[pi[x]] = rol(t, y); t = u; x++; )
// Chi
FOR55(y,
FOR51(x, b[x] = a[y + x];)
FOR51(x, a[y + x] = b[x] ^ ((~b[(x + 1) % 5]) & b[(x + 2) % 5]);)
)
// Iota
a[0] ^= RC[i];
}

for (i=0; i<25; i++) a[i] = eswap_htole(a[i]);
}

+ 64
- 0
strobe/python/Makefile View File

@@ -0,0 +1,64 @@
.PHONY: all test shavs shamont shakat clean
SHELL := /bin/bash
PYTHON ?= python

all:
@echo "Not making test because that takes for fricken ever"
@false

define def_monte
SHAMONT += test-sha3vs-$(1)-Monte
test-sha3vs-$(1)-Monte: kat/$(1)Monte.rsp Strobe/Test/Sha3vs.py Strobe/Keccak.py
$(PYTHON) -B -m Strobe.Test.Sha3vs \
--test=Monte \
--hash=$(1) \
--seed=$(shell perl -ne 'print $$1 if /(?:Seed|Msg) = ([a-f0-9]+)/i' kat/$(1)Monte.rsp) \
--min-len=$(shell perl -ne 'print $$1 if /.Minimum Output Length .bits. = ([0-9]+)/i' kat/$(1)Monte.rsp) \
--max-len=$(shell perl -ne 'print $$1 if /.Maximum Output Length .bits. = ([0-9]+)/i' kat/$(1)Monte.rsp) \
| diff -u --strip-trailing-cr <(egrep -v '^\#' $$<) -
endef

define def_kat
SHAKAT += test-sha3vs-$(1)-$(2)
test-sha3vs-$(1)-$(2): kat/$(1)$(2).rsp Strobe/Test/Sha3vs.py Strobe/Keccak.py
$(PYTHON) -B -m Strobe.Test.Sha3vs \
--test=Kat \
--hash=$(1) \
--file=$$< \
| diff -u --strip-trailing-cr <(egrep -v '^\#' $$<) -
endef
define def_common
$(eval $(call def_monte,$(1)))
$(eval $(call def_kat,$(1),ShortMsg))
$(eval $(call def_kat,$(1),LongMsg))
endef
ifneq ("$(wildcard kat)","")
$(eval $(call def_common,SHA3_224))
$(eval $(call def_common,SHA3_256))
$(eval $(call def_common,SHA3_384))
$(eval $(call def_common,SHA3_512))
$(eval $(call def_common,SHAKE128))
$(eval $(call def_common,SHAKE256))
$(eval $(call def_kat,SHAKE128,VariableOut))
$(eval $(call def_kat,SHAKE256,VariableOut))
endif

KAT1 = 'http://csrc.nist.gov/groups/STM/cavp/documents/sha3/sha-3bytetestvectors.zip'
KAT2 = 'http://csrc.nist.gov/groups/STM/cavp/documents/sha3/shakebytetestvectors.zip'
fetchkat:
mkdir -p kat
(cd kat && wget $(KAT1) && unzip `basename $(KAT1)`)
(cd kat && wget $(KAT2) && unzip `basename $(KAT2)`)

shamont: $(SHAMONT)
shakat: $(SHAKAT)
shavs: shakat shamont
@echo "All known-answer tests passed"
test: shavs

clean:
find . -name '*.pyc' -delete

+ 108
- 0
strobe/python/Strobe/ControlWord.py View File

@@ -0,0 +1,108 @@
from collections import namedtuple

# Control flags
FLAG_R = 1<<0
FLAG_I = 1<<0
DIR_CLIENT = 0
DIR_SERVER = FLAG_I
FLAG_A = 1<<1
FLAG_C = 1<<2
FLAG_T = 1<<3
FLAG_M = 1<<4
FLAG_K = 1<<5

# Record defining a STROBE control word
class ControlWord(namedtuple("ControlWord",("name",
"bytes","dmode","cmode",
"length_bytes","length","max_length","min_length"))):

"""
Control word for STROBE.
TODO: write more docs
"""
def __new__(cls,name,
bytes,dmode,cmode=None,
length_bytes=0,length=None,max_length=None,min_length=None,explicit=None):
if explicit is None:
explicit = (len(bytes) or length_bytes) and (dmode & FLAG_T)
if cmode is None:
# Default: Don't send unless there are length bytes and transport
if explicit: cmode = FLAG_A | FLAG_T | FLAG_M
else: cmode = FLAG_A | FLAG_M
bytes = bytearray(bytes)
if dmode & (FLAG_T | FLAG_A) == 0 and length_bytes == 0 and length is None:
length = 0
return super(ControlWord,cls).__new__(cls,name,
bytes,dmode,cmode,
length_bytes,length,max_length,min_length)
def __str__(self): return self.name

TYPE_META = 0
TYPE_ABSORB = FLAG_A
TYPE_PLAINTEXT = FLAG_A | FLAG_T
TYPE_ENCRYPT = FLAG_A | FLAG_T | FLAG_C
TYPE_MAC = FLAG_T | FLAG_C
TYPE_PRNG = FLAG_A | FLAG_C
TYPE_RATCHET = FLAG_C # to be used with extract
TYPE_KEY = FLAG_A | FLAG_C
################################################################################
# Example control words.
#
# The STROBE lite framework is not tied to any of these definitions.
# These are just some examples / recommendations of what you can use.
#
# These code words span the gamut from offline encrypted and/or signed messages,
# to full TLS-like protocols.
#
# ***
# The assumption is that most protocols will use a VERY SMALL SUBSET of these tags.
# They are comprehensive just to demonstrate that you could replace TLS with a
# protocol like this.
# ***
################################################################################

# 0x00-0x0F: symmetric cryptography
SYM_SCHEME = ControlWord("SYM_SCHEME", [0x00], TYPE_PLAINTEXT , length_bytes=2)
SYM_KEY = ControlWord("SYM_KEY", [0x01], TYPE_KEY )
APP_PLAINTEXT = ControlWord("APP_PLAINTEXT", [0x02], TYPE_PLAINTEXT , length_bytes=2)
APP_CIPHERTEXT = ControlWord("APP_CIPHERTEXT", [0x03], TYPE_ENCRYPT , length_bytes=2)
AUTH_DATA = ControlWord("NONCE", [0x04], TYPE_PLAINTEXT , length_bytes=2)
AUTH_DATA = ControlWord("AUTH_DATA", [0x05], TYPE_PLAINTEXT , length_bytes=2)
MAC = ControlWord("MAC", [0x06], TYPE_MAC , length_bytes=2, length=16, explicit=False )
STEG_MAC = ControlWord("STEG_MAC", [0x06], TYPE_MAC , length_bytes=2, min_length=16, cmode=TYPE_ENCRYPT|FLAG_M)
SIV_MAC_INNER = ControlWord("SIV_MAC_INNER", [0x06], TYPE_MAC , length_bytes=2, length=16, explicit=False )
HASH = ControlWord("HASH", [0x07], TYPE_PRNG , length_bytes=2, explicit=False )
SIV_PT_INNER = ControlWord("SIV_PT_INNER", [0x0D], TYPE_PLAINTEXT , explicit=False)
SIV_MAC_OUTER = ControlWord("SIV_MAC_OUTER", [0x0E], TYPE_PLAINTEXT , length=16)
RATCHET = ControlWord("RATCHET", [0x0F], TYPE_RATCHET , length=32)

# 0x10-0x1F: Asymmetric key exchange and encryption */
KEM_SCHEME = ControlWord("KEM_SCHEME", [0x10], TYPE_PLAINTEXT , length_bytes=2)
PUBLIC_KEY = ControlWord("PUBLIC_KEY", [0x11], TYPE_PLAINTEXT , length_bytes=2)
KEM_EPH = ControlWord("KEM_EPH", [0x12], TYPE_PLAINTEXT , length_bytes=2)
KEM_RESULT = ControlWord("KEM_RESULT", [0x13], TYPE_KEY )

# 0x18-0x1F: Signatures */
SIG_SCHEME = ControlWord("SIG_SCHEME", [0x18], TYPE_PLAINTEXT , length_bytes=2)
SIG_EPH = ControlWord("SIG_EPH", [0x19], TYPE_PLAINTEXT , length_bytes=2)
SIG_CHALLENGE = ControlWord("SIG_CHALLENGE", [0x1A], TYPE_PRNG , length_bytes=2, explicit=False)
SIG_RESPONSE = ControlWord("SIG_RESPONSE", [0x1B], TYPE_ENCRYPT , length_bytes=2)

# 0x00-0x0F: header and other metadata */
HANDSHAKE = ControlWord("HANDSHAKE", [0x20], TYPE_PLAINTEXT , length_bytes=2)
VERSION = ControlWord("VERSION", [0x21], TYPE_PLAINTEXT , length_bytes=2)
CIPHERSUITE = ControlWord("CIPHERSUITE", [0x22], TYPE_PLAINTEXT , length_bytes=2)
META_PLAINTEXT = ControlWord("META_PLAINTEXT", [0x24], TYPE_PLAINTEXT , length_bytes=2)
META_CIPHERTEXT= ControlWord("META_CIPHERTEXT", [0x25], TYPE_PLAINTEXT , length_bytes=2)
CERTIFICATE = ControlWord("CERTIFICATE", [0x26], TYPE_PLAINTEXT , length_bytes=2)
ENCRYPTED_CERT = ControlWord("ENCRYPTED_CERT", [0x27], TYPE_ENCRYPT , length_bytes=2)
OVER = ControlWord("OVER", [0x2E], TYPE_MAC , length_bytes=2)
CLOSE = ControlWord("CLOSE", [0x2F], TYPE_MAC , length_bytes=2)

+ 264
- 0
strobe/python/Strobe/Keccak.py View File

@@ -0,0 +1,264 @@
"""
Keccak and Keccak modes.

Copyright (c) Mike Hamburg, Cryptography Research, 2016.
I will need to contact legal to get a license for this; in the mean time it is
for testing purposes only.
"""

import itertools
import unittest
from math import log

class KeccakError(Exception):
pass

class KeccakF(object):
"""Keccak-f[n] on byte arrays."""
def __init__(self,bits=1600,trace=False):
"""
Initialize at a given bit length.
If trace is set, then print out call,delta,return when called.
"""
if bits not in [200,400,800,1600]:
raise KeccakError("KeccakF bits must be in [200,400,800,1600]")
self.bits = bits
self.nbytes = bits//8
self._trace = trace
self._last = None
def __repr__(self): return "KeccakF(%d)" % self.bits
def copy(self):
"""Copy this F object"""
ret = KeccakF(bits=self.bits,trace=self._trace)
if self._last is not None: ret._last = bytearray(self._last)
return ret
def __call__(self, data):
"""Return KeccakF[n](data)"""
if self._trace:
if self._last is not None:
print("Del KeccakF:",\
"".join(("%02x" % (d^e) for d,e in zip(data,self._last))))
print("Call KeccakF:", "".join(("%02x" % d for d in data)))
WORD = self.bits//25
A = [ [ sum(( data[(y*5+x)*WORD//8+o//8]<<o
for o in range(0,WORD,8)))
for y in range(5)]
for x in range(5)]
def rot(x,n): return (x<<n | x>>(WORD-n)) & (1<<WORD)-1
LFSR = 0x01
B = [[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]]
for i in range(12 + 2*int(log(self.bits//25,2))):
# Theta
C = [ A[x][0]^A[x][1]^A[x][2]^A[x][3]^A[x][4] for x in range(5) ]
D = [ C[(x-1)%5] ^ rot(C[(x+1)%5],1) for x in range(5) ]
for x in range(5):
for y in range(5):
A[x][y] ^= D[x]

# Rho pi
x,y = 1,0
for j in range(1,25):
tmp = A[x][y]
x,y = y,(2*x+3*y)%5
B[x][y] = rot(tmp, (j*(j+1)//2) % WORD)
B[0][0] = A[0][0]

# Chi
for x in range(5):
for y in range(5):
A[x][y] = B[x][y]^((~B[(x+1)%5][y]) & B[(x+2)%5][y])

# Iota
for l in range(7):
A[0][0] ^= ((1<<WORD)-1) & ((LFSR&1)<<(2**l-1))
LFSR = (LFSR<<1) ^ (LFSR>>7)*0x171
ret = bytearray(( A[x][y]>>o & 0xFF
for y in range(5)
for x in range(5)
for o in range(0,WORD,8) ))
if self._trace:
self._last = bytearray(ret)
print("Ret KeccakF:", "".join(("%02x" % d for d in ret)))
return ret

class KeccakHash(object):
"""
Keccak mode such as SHA3, SHAKE, cSHAKE, CMAC, etc
"""
def __init__(self,rate_bytes=None,suffix=None,
S=bytearray(), # distinguisher
N=bytearray(), # NIST function name
prefix=bytearray(),
out_bytes=None,F=None,
copy_of=None):
if copy_of is None:
if F is None: F = KeccakF()
self._F = F
self._st = bytearray(F.nbytes)
if rate_bytes is None and out_bytes is not None:
# Like SHA-3
rate_bytes = F.nbytes - 2*out_bytes
elif rate_bytes is None:
raise KeccakError("Need a rate")
self._pos = 0
self.rate_bytes = rate_bytes
self.out_bytes = out_bytes
if len(S) or len(N):
if suffix is None: suffix = 0x4
self.update(self._bytepad(self._encode_string(N)
+ self._encode_string(S)))
if suffix is None: suffix = 0x1
self._suffix = suffix
self.update(prefix)
else:
self._F = copy_of._F.copy()
self._st = copy_of._st.copy()
self._pos = copy_of._pos
self._suffix = copy_of._suffix
# rate_bytes and out_bytes should be public, I guess?
self.rate_bytes = copy_of.rate_bytes
self.out_bytes = copy_of.out_bytes
def copy(self):
"""Copy the state of the hash"""
return KeccakHash(copy_of=self)
@staticmethod
def _encode_string(string):
return (bytearray(KeccakHash._left_encode(8*len(string)))
+ bytearray(string))
def update(self,string):
"""Update the hash with a new state"""
for b in string:
if isinstance(b,str): b = ord(b[0])
self._st[self._pos] ^= b
self._pos += 1
if self._pos >= self.rate_bytes:
self._pos = 0
self._st = self._F(self._st)
@staticmethod
def _left_encode(n):
output = []
while n > 0 or len(output)==0:
output = [int(n % 256)] + output
n >>= 8
return bytearray([len(output)] + output)
def _bytepad(self,string):
w = self.rate_bytes
string = self._left_encode(w) + bytearray(string)
extra = (w - (len(string) % w)) % w
string = string + bytearray(extra)
return string
def digest_it(self):
"""
Return the output of the hash, as an iterator.
Does not modify or destroy the context.
"""
assert self._pos < self.rate_bytes
i = 0
st = bytearray(self._st)
st[self._pos] ^= self._suffix
st[self.rate_bytes-1] ^= 0x80
while True:
if i % self.rate_bytes == 0: st = self._F(st)
yield st[i % self.rate_bytes]
i += 1
if self.out_bytes is not None and i == self.out_bytes:
return
def digest(self,length=None):
"""
Return [length] bytes of the output of the hash.
Does not modify or destroy the context.
If length and out_bytes are not defined, return an iterator.
"""
if length is None and self.out_bytes is None:
return self.digest_it()
elif length is None:
length = self.out_bytes
elif self.out_bytes is None:
pass
elif self.out_bytes < length:
raise KeccakError("Requested output is too long")
return bytearray(itertools.islice(self.digest_it(),length))
@classmethod
def hash(cls,string,length=None,*args,**kwargs):
"""Output the hash of a string."""
obj = cls(*args,**kwargs)
obj.update(string)
return obj.digest(length)
def KeccakMode(name,*args,**kwargs):
"""
Keccak hasher with mode filled in
"""
class Derived(KeccakHash):
def __init__(self):
super(Derived,self).__init__(*args,**kwargs)
def copy(self): return Derived(copy_of=self)
Derived.__name__ = name
return Derived

SHA3_224 = KeccakMode("SHA3_224",out_bytes=224//8,suffix=6)
SHA3_256 = KeccakMode("SHA3_256",out_bytes=256//8,suffix=6)
SHA3_384 = KeccakMode("SHA3_384",out_bytes=384//8,suffix=6)
SHA3_512 = KeccakMode("SHA3_512",out_bytes=512//8,suffix=6)
SHAKE128 = KeccakMode("SHAKE128",rate_bytes=200-128//4,suffix=0x1F)
SHAKE256 = KeccakMode("SHAKE256",rate_bytes=200-256//4,suffix=0x1F)

def cSHAKE128(S,N=""):
return KeccakMode("cSHAKE128",S=S,N=N,rate_bytes=200-128//4)
def cSHAKE256(S,N=""):
return KeccakMode("cSHAKE256",S=S,N=N,rate_bytes=200-256/4)
class SimpleTestVectors(unittest.TestCase):
def test(self):
message = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
self.assertEqual(SHA3_224.hash(message),
"8a24108b154ada21c9fd5574494479ba5c7e7ab76ef264ead0fcce33".decode("hex"))
self.assertEqual(SHA3_256.hash(message),
"41c0dba2a9d6240849100376a8235e2c82e1b9998a999e21db32dd97496d3376".decode("hex"))
self.assertEqual(SHA3_384.hash(message),
"991c665755eb3a4b6bbdfb75c78a492e8c56a22c5c4d7e429bfdbc32b9d4ad5aa04a1f076e62fea19eef51acd0657c22".decode("hex"))
self.assertEqual(SHA3_512.hash(message),
("04a371e84ecfb5b8b77cb48610fca8182dd457ce6f326a0fd3d7ec2f1e91636d"
+"ee691fbe0c985302ba1b0d8dc78c086346b533b49c030d99a27daf1139d6e75e").decode("hex"))
self.assertEqual(SHAKE128.hash(message,128/4),
"1a96182b50fb8c7e74e0a707788f55e98209b8d91fade8f32f8dd5cff7bf21f5".decode("hex"))
self.assertEqual(SHAKE256.hash(message,256/4),
("4d8c2dd2435a0128eefbb8c36f6f87133a7911e18d979ee1ae6be5d4fd2e3329"
+"40d8688a4e6a59aa8060f1f9bc996c05aca3c696a8b66279dc672c740bb224ec").decode("hex"))
self.assertEqual(cSHAKE128("Email Signature").hash(bytearray((i for i in xrange(0x04))),32),
"c1c36925b6409a04f1b504fcbca9d82b4017277cb5ed2b2065fc1d3814d5aaf5".decode("hex"))
self.assertEqual(cSHAKE128("Email Signature").hash(bytearray((i for i in xrange(0xc8))),32),
"c5221d50e4f822d96a2e8881a961420f294b7b24fe3d2094baed2c6524cc166b".decode("hex"))
# TODO: test cSHAKE256; more vectors; Monte Carlo


+ 164
- 0
strobe/python/Strobe/Strobe.py View File

@@ -0,0 +1,164 @@
"""
An example implementation of STROBE. Doesn't include the key tree.

Copyright (c) Mike Hamburg, Cryptography Research, 2016.

I will need to contact legal to get a license for this; in the mean time it is
for example purposes only.
"""

from __future__ import absolute_import
from Strobe.Keccak import KeccakF

class AuthenticationFailed(Exception):
"""Thrown when a MAC fails."""
pass

I,A,C,T,M,K = 1<<0, 1<<1, 1<<2, 1<<3, 1<<4, 1<<5
class Strobe(object):
def __init__(self, proto, F = KeccakF(1600), security = 128, copy_of=None, doInit=True):
if copy_of is None:
self.pos = self.posbegin = 0
self.I0 = None
self.F = F
self.R = F.nbytes - security//4

# Domain separation doesn't use Strobe padding
self.initialized = False
self.st = bytearray(F.nbytes)
domain = bytearray([1,self.R,1,0,1,12*8]) \
+ bytearray("STROBEv1.0.2")
if doInit: self._duplex(domain, forceF=True)
# cSHAKE separation is done.
# Turn on Strobe padding and do per-proto separation
self.R -= 2
self.initialized = True
if doInit: self.operate(A|M, proto)
else:
self.R,self.pos,self.posbegin,self.I0,self.F = \
(copy_of.R,copy_of.pos,copy_of.posbegin,copy_of.I0,
copy_of.F.copy())
self.st = bytearray(copy_of.st)
def copy(self): return Strobe(None,copy_of=self)
def deepcopy(self): return self.copy()
def _runF(self):
if self.initialized:
self.st[self.pos] ^= self.posbegin
self.st[self.pos+1] ^= 0x04
self.st[self.R+1] ^= 0x80
self.st = self.F(self.st)
self.pos = self.posbegin = 0

def _duplex(self, data, cbefore=False, cafter=False, forceF=False):
assert not (cbefore and cafter)
# Copy data, and convert string or int to bytearray
# This converts an integer n to an array of n zeros
data = bytearray(data)

for i in range(len(data)):
if cbefore: data[i] ^= self.st[self.pos]
self.st[self.pos] ^= data[i]
if cafter: data[i] = self.st[self.pos]
self.pos += 1
if self.pos == self.R: self._runF()
if forceF and self.pos != 0: self._runF()
return data
def _beginOp(self, flags):
# Adjust direction information so that sender and receiver agree
if flags & T:
if self.I0 is None: self.I0 = flags & I
flags ^= self.I0

# Update posbegin
oldbegin, self.posbegin = self.posbegin, self.pos+1
self._duplex([oldbegin,flags], forceF = flags&(C|K))
def operate(self, flags, data, more=False, meta_flags=A|M, metadata=None):
"""
STROBE main duplexing mode.
Op is a byte which describes the operating mode, per the STROBE paper.
Data is either a string or bytearray of data, or else a length. If it
is given as a length, the data is that many bytes of zeros.
If metadata is not None, first apply the given metadata in the given
meta_op.
STROBE operations are streamable. If more is true, this operation
continues the previous operation. It therefore ignores metadata and
doesn't use the beginOp code from the paper.
Certain operations return data. If an operation returns no data
(for example, AD and KEY don't return any data), it returns the empty
byte array.
The meta-operation might also return data. This is convenient for
explicit framing (meta_op = 0b11010/0b11011) or encrypted explicit
framing (meta_op = 0b11110/0b11111)
If the operation is a MAC verification, this function returns the
empty byte array (plus any metadata returned) on success, and throws
AuthenticationFailed on failure.
"""
assert not (flags & (K|1<<6|1<<7)) # Not implemented here
meta_out = bytearray()
if more:
assert flags == self.cur_flags
else:
if metadata is not None:
meta_out = self.operate(meta_flags, metadata)
self._beginOp(flags)
self.cur_flags = flags
if (flags & (I|T) != (I|T)) and (flags & (I|A) != A):
# Operation takes no input
assert isinstance(data,int)

# The actual processing code is just duplex
cafter = (flags & (C|I|T)) == (C|T)
cbefore = (flags & C) and not cafter
processed = self._duplex(data, cbefore, cafter)
# Determine what to do with the output.
if (flags & (I|A)) == (I|A):
# Return data to the application
return meta_out + processed
elif (flags & (I|T)) == T:
# Return data to the transport.
# A fancier implementation might send it directly.
return meta_out + processed
elif (flags & (I|A|T)) == (I|T):
# Check MAC
assert not more
failures = 0
for byte in processed: failures |= byte
if failures != 0: raise AuthenticationFailed()
return meta_out

else:
# Operation has no output data, but maybe output metadata
return meta_out

def ad (self,data, **kw): return self.operate(0b0010,data,**kw)
def key (self,data, **kw): return self.operate(0b0110,data,**kw)
def prf (self,data, **kw): return self.operate(0b0111,data,**kw)
def send_clr(self,data, **kw): return self.operate(0b1010,data,**kw)
def recv_clr(self,data, **kw): return self.operate(0b1011,data,**kw)
def send_enc(self,data, **kw): return self.operate(0b1110,data,**kw)
def recv_enc(self,data, **kw): return self.operate(0b1111,data,**kw)
def send_mac(self,data=16,**kw): return self.operate(0b1100,data,**kw)
def recv_mac(self,data ,**kw): return self.operate(0b1101,data,**kw)
def ratchet (self,data=32,**kw): return self.operate(0b0100,data,**kw)

+ 127
- 0
strobe/python/Strobe/StrobeCShake.py View File

@@ -0,0 +1,127 @@
"""
Equivalent implementation of STROBE, based on CSHAKE. Doesn't implement the
key tree. Designed to show that STROBE is equivalent to an instance of cSHAKE.

Copyright (c) Mike Hamburg, Cryptography Research, 2016.

I will need to contact legal to get a license for this; in the mean time it is
for example purposes only.
"""

from __future__ import absolute_import
from Strobe.Keccak import cSHAKE128
from Strobe.Strobe import AuthenticationFailed

class StrobeCShake(object):
def __init__(self,proto,prim=cSHAKE128,copy_of=None):
if copy_of is None:
self.prim = prim("STROBEv1.0.2")
self.st = self.prim()
self.rate = self.st.rate_bytes - 2
self.output = bytearray(self.rate)
self.begin_off = 0
self.dir = None
self.proto = proto
self.duplex(0x12,proto)
else:
self.rate,self.begin_off,self.dir,self.proto,self.st = \
(copy_of.rate,copy_of.begin_off,copy_of.dir,
copy_of.proto,copy_of.st.copy())
self.output = copy_of.output.copy()
self.prim = copy_of.prim
def __repr__(self):
return "StrobeCShake(\"%s\",%s)" % (self.proto, repr(self.prim))
def copy(self): return Strobe(None,copy_of=self)
def deepcopy(self): return self.copy()
def duplex(self,op,data,more=False,meta_op=0b10010,metadata=None):
"""
STROBE main duplexing mode, as in Strobe.py
"""
(I,A,C,T,M,K) = ((op>>i) & 1 for i in range(6))
assert (op >= 0 and op <= 0x3F)
assert not K # Unimplemented!
def runF():
padlen = len(self.output)
self.st.update(bytearray([self.begin_off]))
self.output = self.st.digest(self.rate)
if padlen == 0:
self.st.update([self.st.suffix ^ 0x80])
else:
self.st.update(
[self.st.suffix]+(padlen-1)*[0x00]+[0x80])
self.begin_off = 0
meta_out = bytearray(0)
if not more:
# Begin the operation. First apply metadata if there is any
if metadata is not None:
if T and I and (meta_op & 0b1000):
# Receive data, so receive meta-op as well.
meta_op |= 0b1
meta_out = self.duplex(meta_op,metadata)
# Mark the beginning of the operation.
self.st.update([self.begin_off])
self.output = self.output[1:]
self.begin_off = self.rate-len(self.output)
if len(self.output) == 0: runF()
# Mark the mode; if the mode uses cipher then run F
if T and self.dir is None: self.dir = I
adjDirOp = op ^ (self.dir if T else 0)
self.st.update([adjDirOp])
self.output = self.output[1:]
if len(self.output) == 0 or C or K: runF()

# Change to byte array
data = bytearray(data)
main_out = bytearray()
# OK, this is the actual duplex routine
while len(data):
can_do = min(len(data), len(self.output))
wrk = data[0:can_do]
update_after = I or not T
if not update_after: self.st.update(wrk)
if C:
for i in range(can_do):
wrk[i] ^= self.output[i]
if update_after: self.st.update(wrk)
main_out += wrk
self.output = self.output[can_do:]
data = data[can_do:]
if len(self.output) == 0:
runF()
if (A and I) or (T and not I):
return meta_out + main_out
elif (I,T,A) == (True,True,False):
# Check the MAC (or recv_zero, but don't do that)
assert not more # Technically well-defined, but has a side channel
any_data = 0
for d in main_out: any_data |= d
if d: raise Exception("MAC failed")
# No data, but maybe there is metadata.
return meta_out

def ad (self,data, **kw): return self.duplex(0b0010,data,**kw)
def key (self,data, **kw): return self.duplex(0b0110,data,**kw)
def prf (self,data, **kw): return self.duplex(0b0111,data,**kw)
def send_clr(self,data, **kw): return self.duplex(0b1010,data,**kw)
def recv_clr(self,data, **kw): return self.duplex(0b1011,data,**kw)
def send_enc(self,data, **kw): return self.duplex(0b1110,data,**kw)
def recv_enc(self,data, **kw): return self.duplex(0b1111,data,**kw)
def send_mac(self,data=16,**kw): return self.duplex(0b1100,data,**kw)
def recv_mac(self,data ,**kw): return self.duplex(0b1101,data,**kw)
def ratchet (self,data=32,**kw): return self.duplex(0b0100,data,**kw)

+ 99
- 0
strobe/python/Strobe/StrobeCWrapper.py View File

@@ -0,0 +1,99 @@
"""
A wrapper around a C implementation of STROBE.

Copyright (c) Mike Hamburg, Cryptography Research, 2016.

I will need to contact legal to get a license for this; in the mean time it is
for example purposes only.
"""
from __future__ import absolute_import

from ctypes import *

from Strobe.Strobe import AuthenticationFailed,I,A,C,T,M,K # TODO

class CStrobe_Failed(Exception):
"""Thrown when a MAC fails, or some internal exception occurred."""
pass

PATH = "../c/build/"
_libstrobe = CDLL(PATH+"libstrobe.so.1")

class CStrobe_Container(Array):
_strobe_size = c_size_t.in_dll(_libstrobe,"strobe_abi_sizeof_strobe_s").value
_type_ = c_ulong
_length_ = int(1 + (_strobe_size-1)//sizeof(c_ulong))

_libstrobe.strobe_abi_overhead_for_transaction.argtypes = (c_uint32,)
_libstrobe.strobe_abi_overhead_for_transaction.restype = c_ssize_t

_libstrobe.strobe_abi_attach_buffer.argtypes = (CStrobe_Container,POINTER(c_ubyte),c_size_t)
_libstrobe.strobe_abi_attach_buffer.restype = None

_libstrobe.strobe_init.argtypes = (CStrobe_Container,POINTER(c_ubyte),c_size_t)
_libstrobe.strobe_init.restype = None

_libstrobe.strobe_duplex.argtypes = (CStrobe_Container,c_uint32,POINTER(c_ubyte),c_size_t)
_libstrobe.strobe_duplex.restype = c_ssize_t

class CStrobe(object):
def __init__(self, proto):
self.container = CStrobe_Container()
proto = self.bufferize(proto)
_libstrobe.strobe_init(self.container,proto,sizeof(proto))
@staticmethod
def bufferize(data):
return (c_ubyte * len(data))(*bytearray(data))
def operate(self, flags, data, more=False, meta_flags=A|M, metadata=None):
# TODO: test operate() with generated metadata
meta_out = bytearray()
if (not more) and (metadata is not None):
meta_out = self.operate(meta_flags, metadata)
if more: flags |= 1<<28
if (flags & (I|T) != (I|T)) and (flags & (I|A) != A):
# Operation takes no input
assert isinstance(data,int)
datalen = data
data = None
else:
data = self.bufferize(data)
datalen = len(data)
if (flags & (I|A) != (I|A)) and (flags & (I|T) != T):
# Operation produces no output
output = None
outputlen = 0
else:
oh = _libstrobe.strobe_abi_overhead_for_transaction(flags)
output = (c_ubyte * (datalen + oh))()
outputlen = sizeof(output)
if flags & I:
# On inbound, the output is app side
a,alen,t,tlen = output,outputlen,data,datalen
else:
# On outbound, the output is transport side
a,alen,t,tlen = data,datalen,output,outputlen
_libstrobe.strobe_abi_attach_buffer(self.container,t,tlen)
ret = _libstrobe.strobe_duplex(self.container,flags,a,alen)
if (ret < 0): raise CStrobe_failed()
if output is None: return meta_out
else: return bytearray(output) + meta_out

def ad (self,data, **kw): return self.operate(0b0010,data,**kw)
def key (self,data, **kw): return self.operate(0b0110,data,**kw)
def prf (self,data, **kw): return self.operate(0b0111,data,**kw)
def send_clr(self,data, **kw): return self.operate(0b1010,data,**kw)
def recv_clr(self,data, **kw): return self.operate(0b1011,data,**kw)
def send_enc(self,data, **kw): return self.operate(0b1110,data,**kw)
def recv_enc(self,data, **kw): return self.operate(0b1111,data,**kw)
def send_mac(self,data=16,**kw): return self.operate(0b1100,data,**kw)
def recv_mac(self,data ,**kw): return self.operate(0b1101,data,**kw)
def ratchet (self,data=32,**kw): return self.operate(0b0100,data,**kw)


+ 429
- 0
strobe/python/Strobe/StrobeFancy.py View File

@@ -0,0 +1,429 @@
"""
An example implementation of STROBE.

The key tree may be patented. Also, it may be easy to violate other
patents with this code, so be careful.

Copyright (c) Mike Hamburg, Cryptography Research, 2015-2016.

I will need to contact legal to get a license for this; in the mean time
it is for example purposes only.
"""
from .Keccak import KeccakF
from .ControlWord import *
from collections import namedtuple
import base64
import threading
import itertools


class StrobeException(Exception):
def __init__(self,*args,**kwargs):
Exception.__init__(self,*args,**kwargs)

class AuthenticationFailed(StrobeException):
def __init__(self,*args,**kwargs):
StrobeException.__init__(self,*args,**kwargs)

class ProtocolError(StrobeException):
def __init__(self,*args,**kwargs):
StrobeException.__init__(self,*args,**kwargs)

def zeros():
while True: yield 0

class Strobe(object):
"""
STROBE protocol framework
"""
version = "v0.7"
PAD = 0x04
CSHAKE_PAD = 0x80
def __init__(self,proto,dir=None,F=None,rate=None,steg=0,copy_from=None,over_rate=None,doInit=True,verbose=False):
if copy_from is not None:
self.F = copy_from.F
self.rate = copy_from.rate
self.proto = copy_from.proto
self.off = copy_from.off
self.prev_mark = copy_from.prev_mark
self.dir = copy_from.dir
self.st = bytearray(copy_from.st)
self.steg = copy_from.steg
self.over_rate = copy_from.over_rate
self.verbose = verbose
else:
if F is None: F = KeccakF()
if rate is None: rate = F.nbytes - 32 - 2
self.F = F
self.rate = rate
self.proto = proto
self.off = self.prev_mark = 0
self.dir = dir
self.steg = steg
self.over_rate = rate + 2
self.verbose = verbose
if doInit: self.init(proto,over_rate)
else: self.st = bytearray(self.F.nbytes)
def __str__(self):
if self.dir is None: dir = "None"
elif self.dir == DIR_CLIENT: dir = "DIR_CLIENT"
elif self.dir == DIR_SERVER: dir = "DIR_SERVER"
return "%s(%s,dir=%s,F=%s)" % (
self.__class__.__name__,self.proto,dir,self.F
)
def copy(self):
return Strobe(proto=self.proto,copy_from=self)

def init(self,proto,over_rate=None):
"""
The initialization routine sets up the state in a way that is
unique to this Strobe protocol. Unlike SHA-3, the protocol
and rate are distinguished up front in the first call to the
F-function.
"""
self.st = bytearray(self.F.nbytes)
# Initialize according to cSHAKE. TODO: check that this is correct
aString = "STROBE " + self.__class__.version
cShakeD = bytearray([1,self.over_rate,1,len(aString)]) + aString + bytearray([1,0])
self.st[0:len(cShakeD)] = cShakeD
self.st = self.F(self.st)
self.duplex(FLAG_A|FLAG_M,proto)
def _run_f(self):
"""
Pad out blocks and run the sponge's F-function
"""
self.st[self.off] ^= self.prev_mark
self.st[self.off+1] ^= self.PAD
self.st[self.over_rate-1] ^= self.CSHAKE_PAD
# if self.verbose:
# print "**** IN ****"
# print "".join(("%02x" % b for b in self.st))
self.st = self.F(self.st)
# if self.verbose:
# print "**** OU ****"
# print "".join(("%02x" % b for b in self.st))
self.off = self.prev_mark = 0
def _set_mode(self, mode):
"""
Put a delimiter in the hash state.
"""
self.st[self.off] ^= self.prev_mark
self.off += 1
self.prev_mark = self.off
if self.off >= self.rate: self._run_f()
# Adjust the mode for initiator vs responder
if mode & FLAG_T:
if self.dir is None:
self.dir = mode & FLAG_I
mode ^= self.dir
self.st[self.off] ^= mode
self.off += 1
if self.off >= self.rate or (mode & (FLAG_C | FLAG_K)):
self._run_f()
def duplex(self,op,data=None,length=None,as_iter=False):
"""
The main STROBE duplex operation.
"""
# steg support: if would send/recv in the clear, send/recv encrypted instead.
if op & FLAG_T: op |= self.steg
self._set_mode(op)
(I,T,C,A,K) = (bool(op & f) for f in [FLAG_I,FLAG_T,FLAG_C,FLAG_A,FLAG_K])
if isinstance(data,str): data = bytearray(data)

# compute flags
yield_anything = (A and I) or (T and not I)
read_anything = (T and I) or (A and not I)
verify_mac = (I,T,A) == (True,True,False)
if data is None or not read_anything:
if length is None: data = ()
else: data = zeros()

if length is not None:
data = itertools.islice(data,length)

if self.verbose: print("Duplex mode=0x%02x:\n " % op, end=' ')
out = self._duplex_iter((I,T,A,C,K),data)
if yield_anything:
# Return the iterator
if as_iter: return out
return bytearray(out)
elif verify_mac:
# Asked to verify a MAC
res = 0
for o in out: res |= o
if res: raise AuthenticationFailed()
return ()
else:
# The data is not used
for o in out: pass
return ()
def _duplex_iter(self, op, data):
"""
Duplexing sponge construction, iterator-version.
"""
(I,T,A,C,K) = op
res = 0
if C: s2o = 0x00FF
else: s2o = 0
s2s = 0xFFFF
if T and not I: s2s ^= s2o
if K:
# The DPA-resistant key tree is a CRI design to mitigate differential
# power analysis at a protocol level.
if self.off != 0:
# Since we call self.mark(C or K) above, this is only possible through
# misuse of "more"
raise Exception("Bug: user called keytree with off != 0")
keytreebits = 2
assert keytreebits > 0 and 8 % keytreebits == 0 and self.PAD << keytreebits < 256
mask = (1<<keytreebits)-1
s2o >>= 8-keytreebits
s2s >>= 8-keytreebits
for byte in data:
for bpos in range(0,8,keytreebits):
byte ^= (self.st[0] & s2o) << bpos
self.st[0] &= s2s
self.st[0] ^= (byte >> bpos) & mask
self.st[1] ^= self.PAD<<keytreebits
self.st[self.over_rate-1] ^= self.CSHAKE_PAD
self.st = self.F(self.st)
yield byte
else:
# Not the keytree
for byte in data:
if self.verbose: print("%02x" % byte, end=' ')
byte ^= self.st[self.off] & s2o
self.st[self.off] &= s2s
self.st[self.off] ^= byte
self.off += 1
if self.off >= self.rate: self._run_f()
yield byte
if self.verbose: print()
def begin_steg(self):
"""
Begin steganography.
"""
self.steg = FLAG_C

@staticmethod
def i2o_le(number,length):
"""
Encode a non-negative integer to bytes, little-endian, of the given length.
"""
if number < 0 or number >= 1 << (8*length):
raise ProtocolError("Cannot encode number %d in %d bytes"
% (number, length))
return [ 0xFF & number >> (8*i)
for i in range(length) ]
@staticmethod
def o2i_le(enc_number):
"""
Decode a non-negative integer from bytes, little-endian.
"""
return sum(( int(x)<<(8*i) for (i,x) in enumerate(enc_number) ))
def outbound(self,cw,data=(),length=None,**kwargs):
"""
Send or inject data with the given control-word.
"""
if length is not None and data is not ():
raise ProtocolError("Explicit length set with data")
if cw.length_bytes == 0:
encoded_length = ()
if length is None: length = cw.length
else:
# determine the length
if length is None: length = cw.length
if length is None:
try: length = len(data)
except TypeError:
data = bytearray(data)
length = len(data)
# encode it
encoded_length = self.i2o_le(length,cw.length_bytes)
cw_bytes = itertools.chain(cw.bytes, encoded_length)
s1 = self.duplex(cw.cmode, cw_bytes)
s2 = self.duplex(cw.dmode, data, length=length, **kwargs)
return bytearray(s1) + bytearray(s2)
def send(self,cw,*args,**kwargs):
"""
Same as .outbound, but assert that mode includes actually sending
data to the wire.
(It is possible that no data will be sent if the length is 0.)
"""
if not (cw.dmode | cw.cmode) & FLAG_T:
raise ProtocolError(
"Used .send on non-T control word; use .inject or .outbound instead"
)
return self.outbound(cw,*args,**kwargs)
def inject(self,cw,*args,**kwargs):
"""
Same as .outbound, but assert that the mode does not include
sending data to the wire.
"""
if (cw.dmode | cw.cmode) & FLAG_T:
raise ProtocolError(
"Used .inject on T control word; use .send or .outbound instead"
)
self.outbound(cw,*args,**kwargs)
def recv_cw(self,data,possible_cws):
"""
Receive data from a list of possible keywords.
Return the keyword and length, or throw an error.
"""
# create stream data
cm = FLAG_I|FLAG_A|FLAG_T|FLAG_M
stream = self.duplex(cm,data,as_iter=True)
poss = list(possible_cws)
i = 0
dr = []
def can_begin_with(cw,bs):
if len(bs) > len(cw.bytes) + cw.length_bytes: return False
lencmp = min(len(bs),len(cw.bytes))
return bytearray(cw.bytes[0:lencmp]) == bytearray(bs[0:lencmp])
while len(poss) > 1:
b = next(stream)
dr.append(b)
poss = [cw for cw in poss if can_begin_with(cw,dr)]

if len(poss) == 0:
# oops, eliminated all possibilities
raise ProtocolError("None of the expected CWs received")
# read extra bytes to finish the control word
cw = poss[0]
extra = len(cw.bytes) + cw.length_bytes - len(dr)
dr.extend(itertools.islice(stream,extra))
if cw.length_bytes > 0:
actual_length = self.o2i_le(dr[-cw.length_bytes:])
# Sanity-check length
if cw.length is not None and cw.length != actual_length:
raise ProtocolError("Received length %d doesn't matched expected length %d"
% (actual_length, cw.length))
elif cw.min_length is not None and cw.min_length > actual_length:
raise ProtocolError("Received length %d less than expected min-length %d"
% (actual_length, cw.min_length))
elif cw.max_length is not None and cw.max_length < actual_length:
raise ProtocolError("Received length %d greater than expected max-length %d"
% (actual_length, cw.max_length))
return cw, actual_length
else:
return cw, cw.length
def inbound_data(self,cw,data,**kwargs):
"""
Take data from a connection.
"""
mode = cw.dmode
if mode & (FLAG_A | FLAG_T): mode |= FLAG_I
return self.duplex(mode,data,**kwargs)
def inbound(self,cws,data=(),length=None,return_cw=False):
"""
Dual of outbound, except that you can pass multiple control words.
"""
if isinstance(cws,ControlWord): cws = [cws]
data = iter(data)
if any((cw1.cmode & FLAG_T for cw1 in cws)):
cw,length = self.recv_cw(data,cws)
else:
assert len(cws) == 1
cw = cws[0]
bytes = cw.bytes
if length is None: length = cw.length
if cw.length_bytes != 0:
assert length is not None
bytes = bytes + bytearray(self.i2o_le(length,cw.length_bytes))
self.duplex(cw.cmode, bytes)
# NB: This precludes use of a "PING" tag, where one party sends the tag
# and the other party sends the data. So if you're going to do that,
# you'll need to call recv_cw and outbound separately.
idata = self.inbound_data(cw,data,length=length)
if return_cw: return cw,idata
else: return idata

def recv(self,cws,*args,**kwargs):
"""
Same as .inbound, but assert that mode includes actually receiving
data to the wire.
"""
if isinstance(cws,ControlWord): cws = [cws]
if not all(((cw.dmode | cw.cmode) & FLAG_T for cw in cws)):
raise ProtocolError(
"Used .recv on non-T control word; use .extract or .inbound instead"
)
return self.inbound(cws,*args,**kwargs)
def extract(self,cw,*args,**kwargs):
"""
Same as .inbound, but assert that the mode does not include
receiving data from the wire.
"""
if (cw.dmode | cw.cmode) & FLAG_T:
raise ProtocolError(
"Used .extract on T control word; use .recv or .inbound instead"
)
return self.inbound(cw,*args,**kwargs)
def send_siv(self,msg):
post = self.copy()
msg1 = self.outbound(SIV_PT_INNER,msg)
mac1 = self.outbound(SIV_MAC_INNER)
mac2 = post.outbound(SIV_MAC_OUTER,mac1)
msg2 = post.outbound(APP_CIPHERTEXT,msg1)
return itertools.chain(mac2, msg2)
def recv_siv(self,msg):
post = self.copy()
msg = iter(msg)
mac1 = post.inbound(SIV_MAC_OUTER,msg)
msg1 = post.inbound(APP_CIPHERTEXT,msg)
msg0 = self.inbound(SIV_PT_INNER,msg1)
self.inbound(SIV_MAC_INNER,mac1)
return msg0

+ 74
- 0
strobe/python/Strobe/Test/Concurrence.py View File

@@ -0,0 +1,74 @@
"""
Concurrence tester. Tests multiple implementations of the same thing.
Error if any of them errors, or if they give difference results.
"""

from __future__ import absolute_import

class ConcurrenceTestFailure(Exception):
pass

class ConcurrenceTest(object):
def __init__(self,*args):
self.impls = list(args)
assert(len(self.impls))
def __repr__(self):
print("ConcurrenceTest(%s)" % ",".join((g.repr for g in self.impls)))
def __str__(self): return repr(self)

def copy(self):
return ConcurrenceTest(*[c.copy() for c in self.impls])
def deepcopy(self): return self.copy()
def __getattr__(self, name):
"""
The main tester. Run the call for each impl, and compare results.
"""
def method(*args,**kwargs):
have_any_ret = False
accepted_ret = None
for g in self.impls:
try: ret = ("OK",getattr(g,name)(*args,**kwargs))
except Exception as e: ret = ("EXN",e)
if not have_any_ret:
accepted_ret = ret
have_any_ret = True
if ret != accepted_ret:
raise ConcurrenceTestFailure(
"%s: %s\n%s: %s" %
(self.impls[0], accepted_ret, g, ret)
)
if accepted_ret[0] == "OK": return accepted_ret[1]
else: raise accepted_ret[1]
return method
if __name__ == '__main__':
from Strobe.Keccak import cSHAKE128, cSHAKE256
from Strobe.StrobeCShake import StrobeCShake
from Strobe.StrobeCWrapper import CStrobe
from Strobe.Strobe import Strobe
proto = "concurrence test"
ct = ConcurrenceTest(Strobe(proto), StrobeCShake(proto), CStrobe(proto))
ct.prf(10)
ct.ad("Hello")
ct.send_enc("World")
ct.send_clr("foo")
ct.recv_clr("bar")
ct.recv_enc("baz")
for i in xrange(200):
ct.send_enc("X"*i)
ct.prf(123)
ct.send_mac()
print "Concurrence test passed."

+ 149
- 0
strobe/python/Strobe/Test/Sha3vs.py View File

@@ -0,0 +1,149 @@
"""
SHA-3 and SHAKE test vectors

Copyright (c) Mike Hamburg, Cryptography Research, 2016.

I will need to contact legal to get a license for this; in the mean time it is
for example purposes only.
"""

from __future__ import print_function
import binascii
import sys
import getopt
import Strobe.Keccak
import fileinput


def monte(hash,seed,samples=100,iterations=1000,bits=None,
minoutbits=None,maxoutbits=None,**kwargs):
if bits is None and hash().out_bytes is not None:
bits = hash().out_bytes * 8
md = binascii.unhexlify(seed)
inputlen = len(md)

print()
if maxoutbits is None:
outputlen = minoutbytes = maxoutbytes = bits//8
print("[L = %d]" % bits)
mdname = "MD"
print()
print("Seed = %s" % seed)
else:
minoutbytes = (minoutbits+7)//8
maxoutbytes = maxoutbits//8
outputlen = maxoutbytes
print("[Minimum Output Length (bits) = %d]" % minoutbits)
print()
print("[Maximum Output Length (bits) = %d]" % maxoutbits)
mdname = "Output"
print()
print("Msg = %s" % seed)

print()
for j in range(samples):
for i in range(iterations):
md = hash.hash((md+bytearray(inputlen))[0:inputlen],length=outputlen)
randmd = bytearray(2)+md
randish = randmd[-2]*256 + randmd[-1]
rng = maxoutbytes-minoutbytes+1
prev_outputlen = outputlen
outputlen = minoutbytes + (randish % rng)
print("COUNT = %d" % j)
if minoutbytes != maxoutbytes: print("Outputlen = %d" % (prev_outputlen*8))
print(mdname,"=", "".join(("%02x" % x for x in md)))
print()
sys.stdout.flush()

def kat(hash,file,len=None,**kwargs):
length = None
outlen = None
ignore = ["[Tested", "[Input Length", "COUNT = ",
"[Minimum Output Length", "[Maximum Output Length"]
for line in open(file,'r').readlines():
line = line.rstrip()
if line == "":
print()
elif any((line.startswith(ign) for ign in ignore)):
print(line)
elif line.startswith("Len = "):
length = int(line.split("Len = ")[1])
print(line)
elif line.startswith("Msg = "):
msg = line.split("Msg = ")[1]
msg = binascii.unhexlify(msg)
if length is not None: msg = msg[0:length//8]
print(line)
elif line.startswith("[L = "):
outlen = int(line.split("[L = ")[1][0:-1])//8
print(line)
elif line.startswith("[Outputlen = "):
outlen = int(line.split("[Outputlen = ")[1][0:-1])//8
print(line)
elif line.startswith("Outputlen = "):
outlen = int(line.split("Outputlen = ")[1])//8
print(line)
elif line.startswith("Output = "):
output = hash.hash(msg, length=outlen)
print("Output =", "".join(("%02x" % x for x in output)))
elif line.startswith("MD = "):
output = hash.hash(msg, length=outlen)
print("MD =", "".join(("%02x" % x for x in output)))
if __name__ == '__main__':
def usage(err=1):
print("usage: TODO", file=sys.stderr)
exit(err)
opts,args = getopt.getopt(sys.argv[1:], "",
["test=","hash=","seed=","min-len=","max-len=","file="])
if len(args) != 0 or len(opts) != len(set(opts)): usage()
opts = dict(opts)
hashes = {
"SHA3_224":Strobe.Keccak.SHA3_224,
"SHA3_256":Strobe.Keccak.SHA3_256,
"SHA3_384":Strobe.Keccak.SHA3_384,
"SHA3_512":Strobe.Keccak.SHA3_512,
"SHAKE128":Strobe.Keccak.SHAKE128,
"SHAKE256":Strobe.Keccak.SHAKE256
}
if "--hash" in opts and opts["--hash"] in hashes:
hash = hashes[opts["--hash"]]
else: usage()
tests = {
"Monte":monte,
"Kat":kat
# TODO: varlen
}
if "--test" in opts and opts["--test"] in tests:
test = tests[opts["--test"]]
else: usage()
seed = None
if "--seed" in opts: seed=opts["--seed"]
file = None
if "--file" in opts: file=opts["--file"]
# parse lengths
minlen = maxlen = None
if "--min-len" in opts and opts["--min-len"] != "":
minlen = int(opts["--min-len"])
if "--max-len" in opts and opts["--max-len"] != "":
maxlen = int(opts["--max-len"])
if (minlen is None) != (maxlen is None): usage()
if minlen is not None and (minlen+7)//8 > maxlen//8: usage()
test(hash,seed=seed,file=file,minoutbits=minlen,maxoutbits=maxlen)


+ 0
- 0
strobe/python/Strobe/Test/__init__.py View File


+ 191
- 0
strobe/python/Strobe/Toy25519.py View File

@@ -0,0 +1,191 @@
# Toy25519.py - Toy Ed25519 arithmetic library with Strobelite interface.
# This version of the Ed25519 library has the Edwards arithmetic, but no
# hashing implemented for the signatures -- the hashing is done by Strobe lite.
#
# Written in 2011? by Daniel J. Bernstein <djb@cr.yp.to>
# 2013 by Donald Stufft <donald@stufft.io>
# 2013 by Alex Gaynor <alex.gaynor@gmail.com>
# 2013 by Greg Price <price@mit.edu>
# 2015 by Mike Hamburg <mike@shiftleft.org>
#
# To the extent possible under law, the author(s) have dedicated all copyright
# and related and neighboring rights to this software to the public domain
# worldwide. This software is distributed without any warranty.
#
# You should have received a copy of the CC0 Public Domain Dedication along
# with this software. If not, see
# <http://creativecommons.org/publicdomain/zero/1.0/>.

"""
NB: This code is not safe for use with secret keys or secret data.
The only safe use of this code is for verifying signatures on public messages.

Functions for computing the public key of a secret key and for signing
a message are included, namely publickey_unsafe and signature_unsafe,
for testing purposes only.

The root of the problem is that Python's long-integer arithmetic is
not designed for use in cryptography. Specifically, it may take more
or less time to execute an operation depending on the values of the
inputs, and its memory access patterns may also depend on the inputs.
This opens it to timing and cache side-channel attacks which can
disclose data to an attacker. We rely on Python's long-integer
arithmetic, so we cannot handle secrets without risking their disclosure.
"""

import hashlib
import operator
import sys
import os


__version__ = "1.0.dev0"


# Useful for very coarse version differentiation.
PY3 = sys.version_info[0] == 3

b = 256
q = 2 ** 255 - 19
l = 2 ** 252 + 27742317777372353535851937790883648493

def inv(z):
"""$= z^{-1} \mod q$, for z != 0"""
return pow(z,q-2,q)

d = -121665 * inv(121666) % q
I = pow(2, (q - 1) // 4, q)

def xrecover(y):
xx = (y * y - 1) * inv(d * y * y + 1)
x = pow(xx, (q + 3) // 8, q)

if (x * x - xx) % q != 0:
x = (x * I) % q

if (x * x - xx) % q != 0:
# It ain't square!
return None
if x % 2 != 0:
x = q-x

return x

def decodeint(s):
s = bytearray(s)
return sum(b<<(8*i) for i,b in enumerate(s))

def encodeint(y,bytes=32):
if y >= 1<<(8*bytes): return None
return bytearray([
(y>>(8*i)) & 0xFF
for i in range(bytes)
])
def decodepoint(s):
ss = bytearray(s)
xlo = ss[-1]>>7
ss[-1] &= 0x7F
y = decodeint(ss)
if y >= q: return None
x = xrecover(y)
if x is None: return None
if x & 1 != xlo: x = q - x
P = (x, y, 1, (x*y) % q)
return P

def encodepoint(P):
(x, y, z, t) = P
zi = inv(z)
x = (x * zi) % q
y = (y * zi) % q
ss = encodeint(y)
ss[-1] ^= 0x80 * (x&1)
return ss

B = decodepoint(encodeint((4*inv(5)) % q))
ident = (0, 1, 1, 0)

def edwards_neg(point):
(x,y,z,t) = point
return (q-x)%q,y,z,(q-t)%q
def edwards_add(P, Q):
# This is formula sequence 'addition-add-2008-hwcd-3' from
# http://www.hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
(x1, y1, z1, t1) = P
(x2, y2, z2, t2) = Q

a = (y1-x1)*(y2-x2) % q
b = (y1+x1)*(y2+x2) % q
c = t1*2*d*t2 % q
dd = z1*2*z2 % q
e = b - a
f = dd - c
g = dd + c
h = b + a
x3 = e*f
y3 = g*h
t3 = e*h
z3 = f*g

return (x3 % q, y3 % q, z3 % q, t3 % q)

def edwards_double(P):
# MH: optimization not worth it.
return edwards_add(P,P)

def scalarmult(P, e):
if e == 0:
return ident
Q = scalarmult(P, e // 2)
Q = edwards_double(Q)
if e & 1:
Q = edwards_add(Q, P)
return Q
def scalarmult_B(e):
# MH: optimization not worth it
return scalarmult(B, e)

class Toy25519:
challenge_bytes = 32

@staticmethod
def get_pubkey(sk):
return encodepoint(scalarmult_B(decodeint(sk)))

@staticmethod
def keygen():
sk = bytearray(os.urandom((b+7)//8))
return Toy25519.get_pubkey(sk),sk

@staticmethod
def ecdh(pk,sk):
P = decodepoint(pk)
if P is None: return None
return encodepoint(scalarmult(P,8*decodeint(sk)))

@staticmethod
def sig_response(secret,esec,challenge):
sl = decodeint(secret)
el = decodeint(esec)
cl = decodeint(challenge)
response = (sl * cl + el) % l
return encodeint(response)
@staticmethod
def sig_verify(pk,eph,challenge,response):
P = decodepoint(pk)
if P is None: return False
MPC = scalarmult(edwards_neg(P),decodeint(challenge))
BR = scalarmult_B(decodeint(response))
EE = edwards_add(MPC,BR)
return encodepoint(EE) == eph


+ 1
- 0
strobe/python/Strobe/__init__.py View File

@@ -0,0 +1 @@
__all__ = ['Strobe','Keccak']

+ 408
- 0
strobe/python/kat/SHA3_224LongMsg.rsp
File diff suppressed because it is too large
View File


+ 309
- 0
strobe/python/kat/SHA3_224Monte.rsp View File

@@ -0,0 +1,309 @@
# CAVS 19.0
# "SHA3-224 Monte" information for "SHA3AllBytes1-28-16"
# Length values represented in bits
# Generated on Thu Jan 28 13:32:43 2016
[L = 224]
Seed = 3a9415d401aeb8567e6f0ecee311f4f716b39e86045c8a51383db2b6
COUNT = 0
MD = 90080c037bda5fafcada98e8afda62b10ffb5781b97f6e7aa3ded6e6
COUNT = 1
MD = b56de7b4b405b0bdf23ed9c4593956cb4231846f278cd8d8699ab7c0
COUNT = 2
MD = 7bb3d3e02bb77351e26efad816936727495cde19d398c6432944d4d1
COUNT = 3
MD = cf03895afaff496ff32559e84a079f2aaa6cc8ba46a6b72cc096a5c3
COUNT = 4
MD = 25a230652528d153e1450c5bf61675b972ffcfbbd19777f135cdb1e5
COUNT = 5
MD = 3218644ae2c85ded3161149ab9884c1e0a8d0f0de88188efd5c801e9
COUNT = 6
MD = d1b49d1b032ecc662a480e491366e78077b303787a78cd98393ff873
COUNT = 7
MD = 083c955f765d7bf20203a95bc0cc090004c11ffd1efa7c5a329b2f73
COUNT = 8
MD = a9ae11ba02e80c72ad5e2573ba5bea7ff48fd77dbd39eb5b3027ea2a
COUNT = 9
MD = 29a9d5ac6f46afe1394f3bbd74cd54999a0767e255e6f55515b49d41
COUNT = 10
MD = 3f894a37ebcd3d8812fa792d4e4a084eb0032f175bf01b49ad2ec69f
COUNT = 11
MD = eaac419738758661f476379e479e7ea5f21824fcbd215a6e6145e938
COUNT = 12
MD = 435737ad0627fbf1a0979f7d17b89186220e31a90ca3883a43b0f0f1
COUNT = 13
MD = 066f23af0127805daaa28d94753f1e48a73151bf75ab9f3339ca6e77
COUNT = 14
MD = d8a40d99b2abe9472287e947d03e440b146ee5d7710183065c58ba94
COUNT = 15
MD = 6ccc002827eb48a89aecbfa72844d4fbbcb03db7c5b1b9b7fd11ccf5
COUNT = 16
MD = 451b356a57072fca7e5e7e23e4773f3f1ee22063a5df6e730927e1fe
COUNT = 17
MD = e35bbe6d8863305c4196cf6253b1586c0f817a48f84cadb2d3a49c5f
COUNT = 18
MD = 58bb223cc8e93af3a3589b4e2f90c154dd5139e25df125c8b28a0969
COUNT = 19
MD = 76a224d6016e5c010b08e95e58ea013145b776056b12a74786c6ec2b
COUNT = 20
MD = db53dabd8bc94c957b7d0141544368ff4a766d57dc2de0bff4180f01
COUNT = 21
MD = 7e23f5119ee2df35da2d2df6d8b66fdad4f370ad923ef0ed3d2712ff
COUNT = 22
MD = 4cdf60e70c5e28624b2ca2f6eca4406ec98822f589fe67f1dc6361d3
COUNT = 23
MD = d707133bc8872081ff0d993ea19310927caad364b30ec0c8da58455d
COUNT = 24
MD = d37d8170f36352a36cc59e383b6c276931818a46250376892eab1cbb
COUNT = 25
MD = 95674fcae84071c9a036092593860b69f4a99fa3fdca7c6a71c5860c
COUNT = 26
MD = abdc447cf2cca7ba783d5222388170cdb1de87774a90ddadb2b331e2
COUNT = 27
MD = 5fadb07b140543f9a84508eb288dae4c1d218108eb6a5147763bd637
COUNT = 28
MD = a466716335f41a3c35a42a7e39fbf8e8ea03c6a9919cf1af16b3af5d
COUNT = 29
MD = 927aa47bc75cf6ee96a5828998e0e7bfcce4d252ccae06d93ed30219
COUNT = 30
MD = 478495c0916b6757f2548d249e2d85e939fbe3280227bb5d773ca986
COUNT = 31
MD = 018253a61c3357adf9fbf6d44a115081e8351f02cd25c3d7cb2adf46
COUNT = 32
MD = d2fd3b6ac00d79dba3ed43df329e922e524b5dccf7bafacdac5cd1d1
COUNT = 33
MD = 1619c75818e91d4d3af0f4231c26c26121853e805078f419559a2722
COUNT = 34
MD = cc5b0ddd2428a7b65204b5773fa99905b2ebc88cee66716e76f0868d
COUNT = 35
MD = d69405b098b209808835ad97fc34d264f6196c583e3bc24c070313a7
COUNT = 36
MD = 1780728c3e6417d07f190dd38956fcb64d267c9d5bac9ffb199bb277
COUNT = 37
MD = c041639a463c32d8834e139fd1100da0c6471d9569bc07455676fa4b
COUNT = 38
MD = 544df2a88a44d63bd105bfca65ce779105cb894b1a970ce85b0d98ac
COUNT = 39
MD = 8ebfd10e55c0417f19a1802e627835cf9eef6c791d5afe02c49c9fe9
COUNT = 40
MD = 0eb2090104b4f60af3491a71b057c8b4ba96e3ccc0cadda9fe46c116
COUNT = 41
MD = ebc660a5531465692938196be72c0e5e1f7d223628188a9631b3d249
COUNT = 42
MD = c72bc20c3bc323423e474f646adc7cdbfbab9ae607061fb680e30042
COUNT = 43
MD = caf7a240d1daf7e982138ea97d13ee38984d2f730b467e3e223392b9
COUNT = 44
MD = b59570f060067d5e950208fe6de5425c684888d9f27732634a752f35
COUNT = 45
MD = 653975b8176264eac60492ba225ec3a7f6f77a6b31a0e2e853c51f59
COUNT = 46
MD = 367af381af7731cbd5b985c1a422d91b679953370589654cfa7019b7
COUNT = 47
MD = 9921860a82ba4f5da944d4116b966460d32ef26c3f4d036a5c168751
COUNT = 48
MD = 4ada4057b4db83d50e587133afeaf856ddb8814d5c7c13435ee007a3
COUNT = 49
MD = 535a01d843cdf600ec37397c8c92f5f6efcf990456a2104db39c322b
COUNT = 50
MD = fd078a0681ff88999797792edc9499ad89917ab3125e71be6d45bf42
COUNT = 51
MD = 0de5b9de4a1467ef9dbf30723431ba5e06979809101727c1836a586a
COUNT = 52
MD = 1131634aecef0c870d6d4fd19427217d9cf503eaae1de358dba780f3
COUNT = 53
MD = 197e7f3708ca08de7f245f9cb395ce484a042408051ef2c3418cd644
COUNT = 54
MD = fb4e16448595bcdf1df6ab016ab017cb3fb4e8598e78ec3822d83349
COUNT = 55
MD = d46404a3544adc5a8db45b5d96698afd6284eaa845c817d0773c9714
COUNT = 56
MD = 4d7ac8006d42de927c01c823aefd8ecdaa8da0b11bf7ee76d3b47969
COUNT = 57
MD = 90ec4505e7f8d2ca9319c06ae84de2b40f9c6d27c395fba6a5e31119
COUNT = 58
MD = a1c2a920736631d4e77a7e61b4843401e5866c1bc6188e7093b4c8f8
COUNT = 59
MD = b6e3132fba32608d03abce8a9e83613a9f40b0cc43fc730ea627b9ba
COUNT = 60
MD = a97413901377f7b6229858e1dc6f4b06535354020808d86bc0683f92
COUNT = 61
MD = 65ad1ae8bcfc92d2beec8ddbe006b07c52d97e870455e4a34b41466c
COUNT = 62
MD = 206f7e464cc2ac73e381ad3c916e5c8779d4979fa30efd79ea798b14
COUNT = 63
MD = 95da7e5da7a33d3cb274da965fb1d35d0c4924e481f11e84486fae5d
COUNT = 64
MD = bbe6ae6208e5632fbce2db1484d9bebe340603db56d76bab0aad410b
COUNT = 65
MD = 08bb3f982529839e8f79341f08fa005007fe78583576175b72192a48
COUNT = 66
MD = 7593dcc53ed5a5ce3c714c02d540e372b35c3e7b24a1f640f0a91336
COUNT = 67
MD = 6668b8ec65ed083377d41d0b11fe4010080228d0f20df3d569fcceaa
COUNT = 68
MD = db726ea3e26c0efd3fff6526556a93864f486d4565318b1d3488b7bc
COUNT = 69
MD = b6a493c84e40e22044461c2a39860744760ca1cc13ee2aeb7883d9dc
COUNT = 70
MD = fafc2292049a428c572ca462f4ee88a4ee83fa01354a9aeff40541d9
COUNT = 71
MD = 08c739c2f2324a52d8117c61b2deea380886bbb9575024774cc1cf3d
COUNT = 72
MD = 7c36db605e5d1de18573e5bbf21b0644f68966beb9b3f7b5536e9ae0
COUNT = 73
MD = 9887beba2d80223b0a66a195b6fb26425c2518b3d853f30d68835007
COUNT = 74
MD = 9e4c2b1dcd4648885261543c5906f3a924e1e5daf6f8503168c2840f
COUNT = 75
MD = 5c714ec41987c96002a46a2c7caf9dddaaccee10e8d383a93e77c6e6
COUNT = 76
MD = 7e6dc237bf496e476bf74ac440c19816225e1bde6cd89b4bb16b185c
COUNT = 77
MD = f707e3ac900df03ecacaae9c0aed27068ca3c5d2c02ebd12be337792
COUNT = 78
MD = 988229e5c5e818157180d4cb9614f8b15866019ec99c63c4aa799ead
COUNT = 79
MD = 50374b6bae57ce6138ee29b0793236437c0ffa2d58865d156df30d03
COUNT = 80
MD = 877eb9ef0582bf8c915e3e8abaa79fda32f115e3e527ea50e99dd5cb
COUNT = 81
MD = 7fc8125b819005f2df346c4673177c9bc27f9673cc1ccd2b3d81f61a
COUNT = 82
MD = 3bd657ec60bdf3ba8df364d299db12314ad378538b133584ee7ded32
COUNT = 83
MD = 7b229c62376d30a6bf5aee6d3403c47ca4ec65ae7089e278d71e716d
COUNT = 84
MD = 22507acec0175541447f801a7fe23aa4c2dbc48c31bcea2ea51f4586
COUNT = 85
MD = 93f1c6c78c70307d97adb4afa2381698e19341642f3228e96b067576
COUNT = 86
MD = 43eb290d20a380ed9c3db6dc66f32386b23895fb01b07084088837b7
COUNT = 87
MD = 5a1cb63998776e62493d9d69da0fcfa214e0f8bed95890e670c7d429
COUNT = 88
MD = bcf9feb341a37c046deb860d2a1e987269ac76fe679629c3508a2412
COUNT = 89
MD = 055463231e3d43efa8033802d3328a0cc3cd912ab482caaa90db3fc2
COUNT = 90
MD = 6de687d5276326d1d7111290b25622a24bef182c406ce9e564ede2ba
COUNT = 91
MD = 0537f81273d9203f104a39e74230ab9b7606f162e40a0b6fcf6cb629
COUNT = 92
MD = b0aa14135f81783821684ba0f9b810daeaaaf4760735b717b2af1580
COUNT = 93
MD = 00c6f9b93d96136b6d1a959001fe60f38dd87ba196d72b644d0d103b
COUNT = 94
MD = 89f4b63aefc6c8e49936d0de5ed34c223a412bbb4d09407fee79dbed
COUNT = 95
MD = 8acb501b216c83d3e500daea16399afd1bef508ccce646ab9199bb5b
COUNT = 96
MD = 206f8daabd9ba1286cda89d0cf33d8fb09bd8605ca865bca469361ad
COUNT = 97
MD = a9fbd98940441e92537d9abcc3d61d2b665348e392f4de25f07a6677
COUNT = 98
MD = d40d3d93decfe44227f5c6d8ab98cf86df9b4ebdfda81ceb0554d7e3
COUNT = 99
MD = 91defbe230b514d7db13d915a82368d32d48f55db31d16e3ae7fbbd0

+ 588
- 0
strobe/python/kat/SHA3_224ShortMsg.rsp View File

@@ -0,0 +1,588 @@
# CAVS 19.0
# "SHA3-224 ShortMsg" information for "SHA3AllBytes1-28-16"
# SHA3-224 tests are configured for BYTE oriented implementations
# Length values represented in bits
# Generated on Thu Jan 28 13:32:43 2016
[L = 224]
Len = 0
Msg = 00
MD = 6b4e03423667dbb73b6e15454f0eb1abd4597f9a1b078e3f5b5a6bc7
Len = 8
Msg = 01
MD = 488286d9d32716e5881ea1ee51f36d3660d70f0db03b3f612ce9eda4
Len = 16
Msg = 69cb
MD = 94bd25c4cf6ca889126df37ddd9c36e6a9b28a4fe15cc3da6debcdd7
Len = 24
Msg = bf5831
MD = 1bb36bebde5f3cb6d8e4672acf6eec8728f31a54dacc2560da2a00cc
Len = 32
Msg = d148ce6d
MD = 0b521dac1efe292e20dfb585c8bff481899df72d59983315958391ba
Len = 40
Msg = 91c71068f8
MD = 989f017709f50bd0230623c417f3daf194507f7b90a11127ba1638fa
Len = 48
Msg = e7183e4d89c9
MD = 650618f3b945c07de85b8478d69609647d5e2a432c6b15fbb3db91e4
Len = 56
Msg = d85e470a7c6988
MD = 8a134c33c7abd673cd3d0c33956700760de980c5aee74c96e6ba08b2
Len = 64
Msg = e4ea2c16366b80d6
MD = 7dd1a8e3ffe8c99cc547a69af14bd63b15ac26bd3d36b8a99513e89e
Len = 72
Msg = b29373f6f8839bd498
MD = e02a13fa4770f824bcd69799284878f19bfdc833ac6d865f28b757d0
Len = 80
Msg = 49ec72c29b63036dbecd
MD = 47cab44618f62dd431ccb13b3b9cd985d816c5d6026afc38a281aa00
Len = 88
Msg = 502f4e28a6feb4c6a1cc47
MD = bbe61d85b4cae716329e2bcc4038e282b4d7836eb846228835f65308
Len = 96
Msg = e723c64b2258b5124f88405f
MD = d09da094cfefaad46b7b335830a9305570f4f4afe79f8629ff9d0c3d
Len = 104
Msg = 0d512eceb74d8a047531c1f716
MD = 29ae0744051e55167176317eb17850a22939d8d94ebb0a90b6d98fde
Len = 112
Msg = 3b9ab76a23ae56340b5f4b80e1f3
MD = c0903be96f38051cfc2a5ad256aa0b8332217f450eab904ee84b6541
Len = 120
Msg = e9fef751a20297ad1938662d131e7a
MD = 48eba36dfe0575597d13ca26133267199dae76d63d1b9e9612720d08
Len = 128
Msg = 2bbb42b920b7feb4e3962a1552cc390f
MD = 0dfa61f6b439bf8e3a6f378fe30a4134e8b2dfb652997a2a76c2789f
Len = 136
Msg = 2254e100bde9295093565a94877c21d05a
MD = 6965256463276dbb26ad34a378c4bacaeae79d700283b188d44d73eb
Len = 144
Msg = 784ef7adecbb9a4cb5ac1df8513d87ae9772
MD = e918a5d52a0d42ab8ba2ea386eb6ad83cb8dd9a6bd461506be356ead
Len = 152
Msg = f4e68964f784fe5c4d0e00bb4622042fa7048e
MD = 765f050c95ae3347cf3f4f5032b428faeab13694e8c7798eafb82475
Len = 160
Msg = a9ca7ec7aaf89db352fecba646ff73efe8e4a7e8
MD = 65d6a49739c0e287584ff9d1f3463ce2e555ae9678147e21b5889e98
Len = 168
Msg = b2f7018581a4e459cf9b9d9816fc17903ba8033f13
MD = c6837f12227bfbd86ccfe794053ce3a54052c8ca8430f526fd64b5f2
Len = 176
Msg = f50086b4dc7bca0baec0076a878dd89571d52e47855b
MD = e39aa96fad581961bda032ed33dce36defde958baf9bae5dc558cf89
Len = 184
Msg = 6e6ef963f5000d0b91b0ad537ddc9697f8db8f10a3d5ee
MD = 66dcb292b4d6bb4cdd4099b8e7bfea9658680c92c51562c091577056
Len = 192
Msg = 12a7b1a73b0b26a66362ec2a91ea5ff11af49a7a148a8cc5
MD = 6fc91ec8ad448173f591b865ed3eb89115a278003376523c00e22f2a
Len = 200
Msg = 8a4768add4a9bd7b3f27461220ceae0218cf3322f4d2a980d1
MD = 9a88bc64e743f2acaa1670cca7e201a299e1cce6df7015b0d2535213
Len = 208
Msg = 5c5b8c1902c8608c204e72a813e2b625021b3182c48b00f7fe4f
MD = 31802a0fa9ae7ae88626604ad9ae41381d6f7c3c90effcfcf70efcf7
Len = 216
Msg = e89e5cf07afb4a58ebeee17ff596d90b3274ba348f14f284fff025
MD = 3bc9b7973f55735b612ddee8cc7907a3f1429b06df7cb1293b989802
Len = 224
Msg = eb9e1143782a0f9fa815261c2adc2758fb1d88ffe40a0ae144189a48
MD = 9d70d22520094a113297a192ead33e316924fdc7a2a9f8ea7098b84b
Len = 232
Msg = c4ba3bff885fb78357221a9a903bc7ebd11c771faf5789e5aabc993a5f
MD = 7b0212b4ee0b14dba62c2db7a765ac56db46e0b06eb744ee35726ddd
Len = 240
Msg = 07810e6b785177e52d0feac0394f3ecc41f35aa08ff1ed8162575f85888c
MD = b413d6f0cce14b7a1044a14bb2803d53bef907093769a5aa63a8e316
Len = 248
Msg = 01c742dc9ab0b05df925d4a351e38bea7ca7ad783594e22487d5b8198583f3
MD = c42c707ddc7b630939544adbdbe567a333ac88c3b5e738dee8f862be
Len = 256
Msg = dd0f85b55fdf56ba254e06f8c2b650cc6b86bf28a14d714011141a86b8f14bd9
MD = 0fe92469297c2c34911eae424710db6d312047898b9756edc5c2deb2
Len = 264
Msg = ddf48f4cdc856c448326092dcf6bfc4ebcf4b36fc2e516eba0956807588b6e827b
MD = 6cd83ba70e1bd387d603ab14c9fdcbf9862d2ebf0987215f011abee8
Len = 272
Msg = c34d1f8729663569569f87b1fd6e0b954ae2e3b723d6c9fcae6ab09b13b4a87483b2
MD = e57e1d24dbd9a30ab311291f5d6a95530caa029c421dde0b487a577e
Len = 280
Msg = 808de7cbf8d831ad4f17eb58031daed38bdab82f467f87c6b2e3a7c5de25c8e8229413
MD = b3c13f11227f4386afdcf7663a120990f27da205ffb9bf83676f86dc
Len = 288
Msg = 5204a0a63707bd1cab67a8797994a052ee73884b325fdf37d86ef280b3f550c9eb4e7fd3
MD = 6aa1060f84127bf2c988230a907242e7d6972a01c6772ba0f7b8bc86
Len = 296
Msg = da9439bd090dfc2eccc1203a7a82c5d6467fec4e5b0a2b2c2b9ea65b03203a8ce365fbd98e
MD = e8f0929f1f6209d41185292d35ebbf5a3bfe5492713b06d56579458d
Len = 304
Msg = 668bbd38c0ad0881a7f095157d00f29b576b01ba54a8f1392e586c640ecb12b2a5c627a67884
MD = 75dd056962c5bb5d6f616a9f57892992946d048df57c0a36a40a365a
Len = 312
Msg = d63ac3bcfee3a5bc503cf20fe8ff496bf7a8064769870c8fc514c29b55825b6288975beb94ba56
MD = c694da941a7a506cef471fdffb5230bb6c3cd2715341033ab7268e9b
Len = 320
Msg = 985f06121aed603171020badc2075fd33256d67d40430839575ddaa7a3f1f22325d06ea40252d5e4
MD = 29f8846aaf234281b515ea1d45674535a6126c38bd959c1995cad7c9
Len = 328
Msg = 8783849552be4540cb24d67996a10d16444b2d936d2fa5fcff51fb0dd5ee03998c0454289215fce47f
MD = 84502256e3f4291ef4d15e8705e579951fc0e39a2d58fda74852551f
Len = 336
Msg = dab31c7b3f40825aac13f6772771b7e7fbc09fedf6eff778d51190ecfd4b0f256cf189baeeec507e945f
MD = 97168a9c3b07ec4987a4cf1f2478731fc674f56a2caeef074590ed6b
Len = 344
Msg = 1119b962bed5815734af7827ec536701a494ac5d4ab83eea1b16ecc80ce4e5f8694a7d11bcba2e34f084dd
MD = 205d89e032f03c8519cf43b720478389b1788f3522c3d347febd2c70
Len = 352
Msg = d2c45e2c1fa0c44efc84e6c0654cc0d867a3e33733c725aa718d974ed6a4b7f8f91de7d3622b1e4be428de2a
MD = d483e39b7add050eb4a793e54c85b250746e382399c74736f33da890
Len = 360
Msg = a873b148fe1807b89cbed930a7802abad6ca0442340e62ed21b84ead9a634713bb4de5648208c0eed6738d9cc8
MD = c86bcc12a6ab792c149aa83a6783ca8bb52b0ca4b2c12661c0a25d22
Len = 368
Msg = b3008f6f567d1eed9ab5b3bbce824d290e66f66bcfcff7f9b8994835b4d54a4e45c9b8651b37dbefe5e3fe5b674f
MD = 23929753ad07e8476e7bdac8a0ca39e9aac158132653be10ebeeb50c
Len = 376
Msg = 78d073b4e13f6850dc1ca36683abac72336465d790eb3575c942667d1e3ecc849f37a8d73604cb0fe726ffe55744a2
MD = 6229233fc655ea48bb5b48b73a081897d855f6cf10478228fc305842
Len = 384
Msg = 45325b80e043c0cdce3ec421ecda529481910c09730128b4bb927dda1659ddd8fd3ca667d857941e6f9fd939a1c57098
MD = 776aa1f54e038f390491a5d69bde7a2dbcba97c35574ebe60c9a772f
Len = 392
Msg = 3bdd6821d938fac52101fbee5d6ba191fb3b6cb634dbf42cebaae57bd897481ae5ee04e2d871a4c333ab5ab6588144f2f1
MD = 62f8f3baea6dcf5af25d53ddfdac0bdcde88e3895df567c6c416a541
Len = 400
Msg = 86fc66f2618c98fe9efa1e3ac04e340385dc2b746cbc0f7c757b88342810fe70d81200952928e7aad0c0b6b19a044537b009
MD = 20a21eb1d3130a4519ce6abd5ab6817081ae1bef3603056476a00e41
Len = 408
Msg = f2a6168e7f92d313fc30f9e6f825a480916216f02e0308db70773ec165e25e81ffbf0220c5ca0cc6c91d3a09da99fa6efa877f
MD = 5d6e5c82574f5e5c0339d3af1f9c28e17bcddc306a15187aff5d3dd7
Len = 416
Msg = 5e3b6b75b54f21b8016effb39276f5e7f493117ac4c0f2dec38a80ae2917dad83c68900120db1325f1f4697e0f5c25a8b92a9702
MD = 5dc2147f1cf655dabb5ca4b2970b4564eb19ec456e6f966bbae19762
Len = 424
Msg = e7f17c131950c06311f47799a0f5a6b4996f4cc890334450e1bd6cc6f5670771c0dc607f8eceb15300ec4220510ed5b7deb3429de6
MD = 4ce80dab9f933112a3fd78c1f76434b197806eddfe35cb0bdd845c15
Len = 432
Msg = c9aa3d0f6d878db11235e7b028f8d67e2ce26eee718f308e21132e377e3170e26ece95bd37a4bd7f873ba7f8b71517ec50297b21cf94
MD = 5963b41b13925a90c9e8fbcded9a82ade8aae36dee920199f6d6ac7f
Len = 440
Msg = 0f170afafcefdfa8b0de328dab30b4e44d98d6aea2bc39557ff4658fce4fbf8526d8b5359f173c14e4da7cf88935c9369fc7d607863f25
MD = fe7e59028c7855c37ae3dc5ee324864cfee6b8bccc2c3b5a410b65d9
Len = 448
Msg = 6b2b92584146a433bee8b947cc1f35b617b73f5b1e0376ac8bdadfe5bfdf2263b205f74dfa53db7a29e5078f5c34a268119736ba390961f6
MD = 132cfa7e71fe0991abbd88ef588ac95ac9289b1d775b42033567dd33
Len = 456
Msg = 39f7a94312bea1b4fa989f5a6775df538f01704120838c4a3104256478b5c0cfbe8b86e2912c980b390ea412edddb69d461e50f9f313bc17af
MD = fcc59655b8fec1a3d878345df9108bd99f4dd0e5218a55fc335e57f7
Len = 464
Msg = ac582b5a4bb0c5e9c40d8f277bda9de3d07fff01e820a1cdaf88708f1d60be60b9a5e83b5c593657387802b4182d1df4e9466e6d7ae6dc7c8079
MD = 5c2e10fae8f4304cd9361690e5d2c4cd15f10a7b14ea60208739579b
Len = 472
Msg = 072753981998453438a520d9de2d5704292910148b8f794ec3765b240c7af1b79462fa9a2f000dd94d592d3a2a069dc244daf57b12c57675f3f89b
MD = b0d290a6ebdd950811a2715f354b0d8935cb610a471cfc5dff5e0660
Len = 480
Msg = 66a9a6d0a322ed2852378af82c0a2c027b1082098ab750925a4dc2e8961d0062c9db02e8cf42a6b48afb0056d6c1f1fbbec3fbeef049535f6e9b3864
MD = d683488c8420eb2d61e528ab0a7b73aa780a085b9c7982293b2ac6ad
Len = 488
Msg = 18419a8498d4e9bfaa911748186c5753d5da5aa033371ffc56650d0ae9b73f430f0d1f3c9d40362786c0429d977b899b64016eca82e64203f6685c12ee
MD = 51d0cd33fd6579b05c366c6fcc653638b7b13b62798b99b36792cdc4
Len = 496
Msg = 4fc52009d58a0fc2573e83fa335b5c1df8c14b2e6daaf05bd6e13fd5722f28de4816772424c2f94ddc3de0d3d7e26812d014bb9fd83012dc9abf1ec9e3f1
MD = 630ee2beaf1c1592eaa6263fc562a260b6054e9eab1aa19536fda170
Len = 504
Msg = acdaa28692f334732088f5efab2c7951fe0f845b9e2c6f1253c3cdcde30a4e8d2120e38c26422219df41eda2c8334e13f669a65f5ba2075b467eded32936d5
MD = 7d4991d54c78af5809cd17024cadae783c6f5a1f0feb365b532580c2
Len = 512
Msg = d1593cd338b7a25bb5413f112a639fe31c981e505c81a820e638c25209e2ce56c8838a7c8117dbadccdec959a6f7cab0cf304315701d4ccf0167b4026a6744de
MD = 84e18330723e4f90520d0b051a9bf9bd7b5c7ec0177803f15cf740e5
Len = 520
Msg = 8cf8ea25310126ae1fdce3c9195395a9d45051a2a3f08ce154d8265b54cca7031a7ec840c3a3359efa4c91c41b74baa698d54ffb9b0170f2edadc5201650c2bdc6
MD = 75de14169d16a9902f6e8a3359d94594a889c4aed9246caa6cf5612c
Len = 528
Msg = e0320fee19af5bfd511a23cabba75acb0815525a3734305aafa49c1d8bdfbd853579646a36a7873c4cfff2eabd7e3902eccff1192aca1f6dce3cf1c988e6aca9f2c8
MD = d7f2018c303ee045de4b8cdefcfb5395674e3a8770d65f0757b4cd5e
Len = 536
Msg = 1a424ecce1a82c47742171a701ad6e0ff1a762ce26f8e332818a7fa1a800a4e506a4bdc813a09ee1d57222ada79a12e2399549ffd80f1628ef55e231ce0913f9ab1930
MD = 277f96fca5d9ab055fae5d4dd10cc49c2237bd38d95bd8dbd168ec21
Len = 544
Msg = af172809570cc306333c25523f863c6d0e0154c55e404722f0d4ed419713dabf8e18493a0e0b53b220a36535b1e8f0bbe43e624fac9f566f992807b6f2d70bb805933e2e
MD = 9581170093600cb67063a314d8decf109ff9368ffbc90ea2d3250577
Len = 552
Msg = a62f4b43250cdf3f43c1da439bc5e4224b15185b60d615e38e3c512425aab145401b57ac3fc0bcc178eafef52a2b7b04b2b89e760212f96c4ee694990831858f0fa7c13c24
MD = a0f5775a2d001a66f0882ce1415261994021988690840c6b4a3470c8
Len = 560
Msg = fcf81c93f917bb06f278f48826ef9ca8ba99ac8f00129fd9f8e81ca31750d5e54818af0331dd239eb77ee4b0c4d0c2d84794cef27da6bfeb707794d3bdbc7b349968f2a316d8
MD = a97a74fb01fec5caf3477220eef6e7c36d0ba4199ddc755f7ccf94ee
Len = 568
Msg = e61d24b500581734c29902ade4c5035c090868df9f24bb330609fcdff4a72d6f18001424fd813cea32923d8aa86c3d215b2ab7d134237bb62e78f61cb9e9b4ef5ced23729d019a
MD = 40758314f1abbd43e0bc9c73a1c7e24719d56eebcd967b39d355e978
Len = 576
Msg = 37b14f04233dfb4da5e5bd1852f77c41e25c4926936fe414c8108200f6f3cd78c03e2dd9615446c14bebc2c70d65506a7a5dec4808806291769e0dbab200e576f9fdb9e240c8b8ff
MD = 2d36af0dd95619a96c5664d8987bbb82d183466ff44151034fed687b
Len = 584
Msg = 45efb0a3d8fb7bb683913459727e8756d67959cfdd4f5b80e13ddf45e09debdc2cc68ceb632d6d45a2d0a869f6d4dc4c136c805849fe77b4b381e4c6b22a3ff69947a9b5aa6b7cbe42
MD = 125e983229f65bf01b59a9b619810a88f1c53b4c3b1960b52a205d99
Len = 592
Msg = 9b6c3c77746219dd88976966c68ead59eb62aa3cf6647798dc06d4fc7ef8bd44d8903f1b7b6f8bbf3d6249052f862e9ccfb0d1957f0bba233603bca0766286d17eb9746bc002abd69583
MD = 762629518833ba68333fc3e3b4d482c60b4e0e828872826b68313315
Len = 600
Msg = 9f452f900219017199edfc5d7d86a162d9750bba4cec77428ed1032e5711b6fb7c37c1a65b3d041c7aa1d4f16bbcfc54f35001436b60abfb6544c0b393fc1389e5c5bdbdf2eaab1d99dd59
MD = 19b432f5c38f665441d36c472d386008a5bbd82aa4eabeaabe3d28cc
Len = 608
Msg = cbfd186592fa68dc3a21d62db1ba55121f58fecb11695859d70bd7ed2a21a2a013a699640842973b571bf4a7c8ee4f617d5e8a4d1e8c15ae33e77097d146eba27934b1e33d8a041f2444ca3a
MD = b32ad13ba4a0b9fc1aa9a1a57bdbfbebdfab71cf5a16e06040f75787
Len = 616
Msg = 173225324c6c350ddba227b89a651e576d1ab6a96895453c33ea61ddb37fa253e666a84d0fea609814688495246161eb9cccdd792cb1b88f36f3125d766e2eabe84175cbe66dbecc91a0ccf173
MD = fc8feecaefffdaa966e9536b91dfc85ea5113a01d6b320677d727a7d
Len = 624
Msg = 6999f398407480cd43bafdaedb8624d9ba0972aa5a2f3504a67fe54ef744b7bb41ea70cf8faa771fac6a2f5823de83826af4c3865b6faeeee3d1d0edfe7f0e9fe3207f917b467d841850fc6e648f
MD = e7abcb4c0f218814ecf45fbf28a3f286d90c5e740aafd1647437c1e1
Len = 632
Msg = 2727eeb1d51098c69fd8141d78f21275b2bb949e7115fd3860526bbda25547c20cf31b79919fa37bfd4726c4e77906ffe0ca9705f1782da0454e799422c815e01e785d418fa881f84341d8cd71ec77
MD = 2be332c873ed4fb70bc1916c76bef2cd3385e674b83aa1ee8ad28a01
Len = 640
Msg = 1f48a5b401d88e6cbe37f3f634d55462865f7cde7990052a1e4a1e4cb2e58c84c2c7ef82923447d7c068b6aa25e388acfc05704e46da14316d37ccdd2706a7b79ddeb02dcdd76f342c9cb2f490c18dc1
MD = 448b70f575a8a1eb74030a985e9c504d4eaf6b1814e1146f782c9af5
Len = 648
Msg = 6dce9a9ecb48b9da8aef51a89e7f7fc1a6a78966b7bac0ac5ba7ab18d92b616bb74537bf7eeb9bd3bdfb40a450747c3de2e6eecfb12763049148fa9134c7870ba80636fb21fc7134f92b0364f5d27deaca
MD = df855d544e17f01125022bc18e9ffced12f3cd39674e68184657ec7e
Len = 656
Msg = d498b6901345afddc5aa50cac77f7f794d7929eed571d95b59c289a0c9f3b812b896bc7b566f5a639ed9948ed066c2c622c6e4dbb2ea37e7c06806d61a22c326d72356ec48c9b5182c29b5f923af20046605
MD = 5b225c29e4547777a2c6a1a2bbe9da2dc6a8c6d0d01d8d8022988be2
Len = 664
Msg = e958b80489aa6a38526244da165dc4464e7961e457f763abdb23f7e48d368331197b37cd5ab1e515ceb1124848504d8be587bf3041d10437ebd53915164556b59106bebdf99115122d99529e02ee155138a13a
MD = 364a988400424557a9c60e4e1f32f0855a3383c90b007d30ee3ec333
Len = 672
Msg = f33ba982bc2c3308f948a1b64c7fb68fb891bc05fa18781b1dc95dc749f7009adc58cca2bb0cf790ebdbb4165bbfab9304a2a6f234688dcf273094dcd8d7b38416be57cedace5783d8b92993548256b5373f2b4e
MD = ca37e52f2843a0f65692c5aeed0169601da3275dfb3ee6d81b467f60
Len = 680
Msg = 8b5d77a906c7ec7563af7551a796e5d5dcf02c42121d7b13a49aa9d4bc79d637190e4e6510ecaf92d1104fd4ec5bd8351446350722d1b2775dbc5e65f8fab473dc637b5ca8a9eb88f68d11dde15275d7c472f9db43
MD = 9337537de482f0cf88cad6b86e195a1e422e59cc60d41d0eca8b0091
Len = 688
Msg = 3a564a84c2b48ee26da138ce2d1ae3c7933bcd65e40288406e56f30d1c48690a4998389dd27b55376f9b4e7f43607fadb16e8933726f00a3e41264cda553532761fefc73e86ed79b849b94e0895451332dc80fe39a4b
MD = 88eab3e16ca8da5716542bae3c7c736b541c896199b2cb941213767b
Len = 696
Msg = 618a53989ffbbf54a76f01f9b87772491d87c8f25c58eb11b18a04f5ba8ed62574c351a466df64731c911458d765cbde83e7f29de90bc1bb26cc56b35c140555a7dcf00f5394d76a4cc531d7d5f57bac7dcbd06a4f73ba
MD = 4a727cc6b4bd93d5ff2ecb81ab5057dfdcbe3e0c49436a58b9ff3ef2
Len = 704
Msg = 31857bb4e82497b526e426de6920a6063d02264d5249feffd14abdbbf03563d4c59ad1f7572c7d0efbc46a65dea9580bde0e387c9edce27cd9b20a46f62a70e6dd5f58e40aac3a22dfb6ba073facdadd58cd6f78c02bd219
MD = 9e614fc139645e158cd1b216e2623e586242af64f8483e6fca20ed4b
Len = 712
Msg = 14859008c83f2831be4d6e54b781b9fb61dadc40c459a93ede11b4c78a7e5a55a71701427526a03b42d883f247904813cd812e7a947c8fa37406aa6145aea6d3fd9ed494186f35333d423ce31e0cd473a031a5803c5593e9a4
MD = 545fafa43afcaf38063d8a312c3a27e0d74bff957f8ef4d51cb29698
Len = 720
Msg = 267a14bad702ef0a8468b31c72715f0533f6b97e6e943839dea420719d6defc5a399f84689e64ecf931ee395ee49f1fe362199b73cc6cb0105b3654b16f19f06ee8aa6b5d5418743d4804f9a059270710d126765e6a49c4ce2e3
MD = 9b9360a5c747e6e1288f6f9d971051ffd84641f6d64e0a4b5142e4ec
Len = 728
Msg = 6c98a8eb3ea4451401e0424c10cb722683b23f75ae254d62eba75abb9aa9698e65ba1ff7c9f86d36d1ca6f0425d19428441b00450e9a2ef685d5da1cd4de1e779184db743fc95a461797333808ae6e42fce1e9da5d82f90cd71b54
MD = 0c6f33f9534fc52f3700f37b9ee678b4c5c8a90b1a2eb1574002e377
Len = 736
Msg = 4bae62a008d9fdba351a1903c66d58e587361990f7c9eea05a2f51f90a2892f60e6c14c4ed36b908c4039bc89797fd88e54281b37f619b3d9a274587229ef48351e8cb1881cb0fc83e6ddc90a05b160fd7d0a1eb0835d57158e42c7b
MD = 989c156ba1fd1f70deb378e46ffcbf6f2cf9cf977a92ac51643c97b4
Len = 744
Msg = 83ca6d4ebdf1c04062ca1abb977670ef9bcc889906935fd64ff4c739912e541b8f8c7932f595ef66e18256dfa1f51f63bfe7a9df3ae2aa431771d19318d6aa3bccfac1a4c8aa0a0433ff807a881e0d5a9722aac6cd57c77eb6a9edf8c0
MD = fb831f2456595fabee9d458625283a80bb4f8f031e9abdbf48b7b51e
Len = 752
Msg = f4c7ad8d24ed5a682c473463e85391050c026fef0b0e6dca388e1a7e2bc872a46746a63f3a2c1ca6e4c8b7c5fb6b58850d77a58988ba091bd7fafb66ced184e548bcfb1b0e6e1485fb6a19cd5ed07640a0777b82273d5e80799b7fa7a57d
MD = 13bee617474b3fc3447025f2a488dba8825d46a4e128b9a8bdeb1b85
Len = 760
Msg = 5f81c5aec92385bfdc55ebd600f23cb04ac9d5c7a1396f801ffea1a6b94aa617231761bdeebc9ec0f4bf9bfaf5ebc7ac82a2c96f1a74c46d94f0dad0bcb9ef7b41ddaff8cf63d2b278239e6558dbaed2797ef3b7f4cff8fe592f6a3551b3d7
MD = 143a6f0a20d5b4dbc5df64a7e50f9985631453eb09ded71667709083
Len = 768
Msg = 0735cecaedef99bf4c53242f0552f49f56bbe589a2f611af75f4f3aec366cdd6702d46391512580202b869097fceb8a45889fbbf9852472f94bc2f432bb8309c4d0c4d3fba01f6e90c5c2ea3f890ed95d132c31f4dadbf268c378fac5604e8a4
MD = 9f5e9f7429e5488a843c52ffb46ae2e84228919d32330a9193af3b21
Len = 776
Msg = 9b4e4df92e5152fe1ec56a9fc865f30bac7e949fc4f62f0b158d10b083636b4de9bb05db69fe31b50103fefc5f8daf3af7156b4552ca3667a9d720bbb2e4bcdabadfd4b7f4fc5bc811faa36710a9d17758a98d4a0474fec27e9ef5b74f5c689935
MD = 487a6f2f875cb253de4cef18ecb4f2a54388ebaffbfc4259bdd97f09
Len = 784
Msg = a61bef838867710ff4341b26b13b8d7af7e461ccd317b160cc4fdaaec7f1805a28ddd3663a4210a7d1b64a752e866aa7224a75bf77bd0d618bcc3b0a3eed6bfe0eb2b882819e6a4cc437bd38915ce53c55d94e9e9339286483dc230d0049777ea1c4
MD = e257bc45b62d0853ba4b0f8578698f4262c31a778cb6a6317b6e6d60
Len = 792
Msg = c0bd79e0c5f72fcb1de6c234bdb67bd0d3f481b962a3a01f2d8c483bd7d5d98548d51d27532716b195fdfb0ea0b77db759b54e269e69e48e2cb07bc9c06259927d2755f48e8d9a020c58a9c9221a9d836f03b30eabf9099c8eeba6abed63bb38275b28
MD = 92df7f848ada8a9698ddc2e7452ac8fc43cf83d2ca2cadd712c595f2
Len = 800
Msg = 77823af9b8796c63baebe7ba9dcde12c626b840ea04f42d878646970ca5bf7aba94eaf110da36ce0c834b654bcac93264a349f520e505f1ec903d3589e3a4adf82687a65ee6dd072d6bc05acdfbdf257cd70a5183a54b4fe8e87d1c22b2e9f4ee817c57d
MD = 819a4340938497cd8b1def8444bb03f8429b9e87bad8000002d60b83
Len = 808
Msg = ada5651b4e240335600940f207b98371f7e743988957bffe0de8ef0862d1ba52c52b6950e7b05c3542c2fb13acaff0442d33940a0e3ea67232f8437eaa02128283ffc0cfe254ac8f542be3f05fbe4e855dd22ae98a81b9a55b3d3753111210048f2b50e068
MD = b6177d179cf17eddcd8988c9108b42af9c41adcc5942c4d33b0f1be2
Len = 816
Msg = ff4704bbbd719b011244ebedf2f2355338fcc7d64844c3a0f36a21569b55f74a9710f8f3d8d83b9bcd733f5885c32b3d149a5ad137d016c03b93a4d11aff8218e8eeec6d6d12a41d1441f3df040feb098ca2f003c4c277fc71300cdd2a399a7bb98ae711c446
MD = a1072b28f3453422e611421309aa49aaebba0273c72b835fdeea1132
Len = 824
Msg = eae4b62f697cf0bf40a1c2c109143c1dde18e24f1c289aba67e5c83eef52b70cf1433bb98013949285969630054e074ca2e249d465cb383dba51561cbcb626f0b3b1d542db1e1ff168f371c7c6764b4f25ade9eb351622212e99903614bbf1fe3914cdf203035a
MD = f5273e4d0bf9779a0975fee23c447b3abb1cd17c34c723d62f3a2fd1
Len = 832
Msg = 0e39e0e6933c6104984fffe115dd8cde77edfee495480aa5e5def424f066a5770345fecb28b16caa5416bc79e2b83145409bd4bfe9a00c8493f06ea2a99dd658fb87b71eb57dafe58da55fa0411e790341e31a8ba8f35bbe71af23b4e8833fd65ec8b4e621e95340
MD = 62fb7d6b3810d0fd7d96b4ff5efe7bd283ddbbeda4a21a62f985a3dc
Len = 840
Msg = e32bea9ab02de7d893ecb7857ba66df2c35ed258123065ca80e2a067fabb7dd4e79839ea0b3c58abace8e97bf42b0b8d97fcb09bb606a1da0243c32d24cc98985df008f8698362f2aa789e2a82b3e5b5011853d0c0e8fbd20c4d2b5f4733f2df8c5ae02e92a90d95d3
MD = 278e06fd12a3e314f60d59a323673ba0a22003e42ac48e1cd04a70d0
Len = 848
Msg = 4157752d3d175a4bc1334fd42c204111728e7059659dcedf334ea7ce30378798d67c598a0afacca5a1c5fba923d54c72cffc9887df1b8df10d96514955056815fd2dd855d32e8b58b6fdf4d45715f636416a0137179f7eb01d786daffa924ccabd523bb31d1b5f0d05c4
MD = 1cab43635d501e43ac42beee263755b9a29827e2a18b21d7be42e447
Len = 856
Msg = 2df12d8c256cd1a127e525ac3763e30c895982eee67ab7c150ce3deae906d2b9110d829ccfdf2793729e31e478e3a310ae525e059971a29515bad2273cee77ad89ad88d63d44e98402c63180cf5eb06d0be3b1faf5adfc5c43a79ffc09a6ee6cddf9c9a039421d5b2184ad
MD = ee60f0d01008cface49af2ee5780ccdee37404c37642008a55fafaf2
Len = 864
Msg = 03be6940e859f9b072660dff28a187551c2425481dd0555d2dee4acc36164f84f8505b6f467ae6f772eafcc9065490d9b4ed12a690d044bf7da14986e571fe34aee28e1d698c4136cc9f95d462c990b6815a54467da6f41c1baa86c448f37ac10bbc2ad1b957b17368ce01a7
MD = a8aa80d4c925889b58eff41b89682b92bea60c1c3995043dac312d2d
Len = 872
Msg = 0baf1ac243c1f34ca5e00aed4d867f967bc2b963e93956c35b6b68da7737de23d7a1405a5dd4a099c663cdc182d4c91bc35f7d3fd5f3ac35ad7a26dbc45e3e86264c7decc538984214a1a0a1d11679ae22f98d7ae483c1a74008a9cd7f7cf71b1f373a4226f5c58eb621ec56e2
MD = f12f7a1c5c1c383a2a5fff8932e2ae9dc342b37652d47356ffc1cb37
Len = 880
Msg = 3c29a8c83e48194a7b87b69e376a06063de2449bd171fa91e58ed2bc904ba853bb35e3f51e7c06e96b5482aac89acfa383bbba3701d20104f8101d69de615f45a24c3e02991bf0d3bb3d37390fe87ecc64032438424218862093a69dd7b99008573661f9996ffe8ed50b7e54f49c
MD = 5c6b29c3cbfd1d2eadf7c791513b27f21c934de6378ef748b779b71d
Len = 888
Msg = 68a3c06e0740b569c72ea6a90d8b45e83c7c350d2bcf1cf6d6dffa7553b8b998087c052e1c065d862bcc6a7a3e0a90acfa1dc410172c9dab140ead9a296811557e1647359acd40341efeb6f5b3fdc0044162a45e62b0ec341634bcecb830626930392f8c6bde85fa088a322054acfc
MD = 58a691524398a5746df28ac083f15861750e0cdd1fd5e5f57c982c18
Len = 896
Msg = d4f757d1c33b9c0b38b4e93e8e2483ec51b4861299f1d650961457496d86614d42a36e3696bf168fd4663efc26e88cd58d151e1531467b73f69dc9ce4f8d41ce579ce1c91e6760e340e7677abdf4fec1040745aa5144640a39b8c4f884df80753a691653003d634fa5bfce81f94ec3f6
MD = be11259377f09821d9dc358592b6565d8ef2b414dfaa7db5609fb751
Len = 904
Msg = ecd9e95f7c5efc8336f80fe67e113657b31482bafc22dc5b45073482846cdc48414d2ea855ae75d9f28a0bdbe30dbe511503788e578f20f25e20bb770ca1d787f2f02911139275dbeaa5ae1aaf155f40d7134915dac34d0938358dc8be97cf1005a922bf3d71c331282f41c86993e0ccff
MD = 6950ad0f91398b39965b1859ea918c531212face1e51d4d390f094e1
Len = 912
Msg = 834ddd8fc7ea0c3385ef8280d3a7b22d59ad17d710a51a544a293544f30659e816a98d38a2d4d92f6f96626a7c79d6f17bfd0a558f45e2fb541172b720ec629c88a7971326050f2b9ab80d30cf8c777f80e37c98fa61797523e81e1bbbc7cd6ee22e4249dae679ce0f3eccfb54495d7e7046
MD = ef21ee8d568c009eaa8d1ea770968cb718c4d56e7b2d966bfcbbf398
Len = 920
Msg = 6ff611208395d81500505dae050ff0c29c0afde2a8e89c96192863ea62c17e292d0502e94dcb7f47f4cdd574264f48716d02d616cf27c759fdf787cdcd43b169ea586c8bca25fa3ce1a08eb615655e2471a0faa81d2edca28eff4030fabf36f10fb5f50fe4eb727c308f317bba995b6310ae12
MD = 8a29f2c0d564935b8d31b7d007f58138489d140917a28ee85d43b6f2
Len = 928
Msg = f977ea38076328bb0ee2297cbe3b2a9755fe8bb95ae726298e04df05201a7ccf2046b82836e092da94a4eb1c291450121718159468e8a330fc2b1272c661fb62397e874ffcd7cccbe5425af725791001c0c035ea41c8c48dabd206ddb217666e2b688237c2127e96eb049d941b34126b373e1345
MD = 15180df5554387337f04de2f37a16b28125adbd02b6fa6cfdb24195d
Len = 936
Msg = 22a8fb43d54fff82749cdce98abe8adafcd443ffe16bf0e99341e1f7064fc07a5907c816abdb326c30fef0f5846e9e313f32b602c9e00352706358fcb7fb81eaf1857a7b0ffddf27b741a465961806ccf672c17993f284b2aaa9a2c854250a4212aa7937a9bfeefc30ec5f0067c3aaf34a1dce2ee6
MD = d11fcbbb2fa03109f952a56e16867c70904552eb580a6659314bd5fe
Len = 944
Msg = 68727636ff38c0ba8999dde3cbd9503900d5ccb01d3c9b7959fb411eedf95cce1805cef6670d1e1133901cc06b55c41d945e654c0d18035498d4f92d167ae21b927cba3a810a41594885a00bff354ffc753e368274d01374469f1b3f7793e436ddc0822ad698f13bd15fb3ed10e0b97fac5f8778d9ce
MD = 21c71bd09ebf5d09155347c4f476b8f9c5aed4579573211887ab6084
Len = 952
Msg = 167cb772f096b2e3b1599cce3440d1af57c5b7df5d2f460b91acc7e52c9fdb19793bc0833751d09f3f664a4167095586a564420a7810125b832e38ae7bb3a0d14403ef6157c20d3d67e6e13a44115b19ff1fb8b64ffa018133b6d532d9da69b9bffbcd74189071a57101e7239401ea50ad1ea04aab961c
MD = c46cb2dfeb8b961e6e84d72e05111e04d62e3f93a055164b135b9072
Len = 960
Msg = b88ff728c8f829841a14e56194bbf278d69f88317a81b4749aa5fdbc9383486e09bff96a2c5b5bdf392c4263438aef43334c33170ef4d89a76263cb9745f3fea74e35fbf91f722bb1351b56436cdd2992e61e6266753749611a9b449dce281c600e37251813446c1b16c858cf6ea6424cdc6e9860f07510f
MD = 8891cdfe486a582e8340bd8b893996d7a4e547e3bf50551902e722f2
Len = 968
Msg = 520f27a4d096d4193d2bc0983cf83bbb5084845b41844800c1f5669b4f67f5785c9c886eac51b059005cc3caf2f7dcfc205c230a8c924f604386696f3d5dd2a68509879d991aa49314d7271a8a8ef711b42825d3cd0071ae3bf6109772bfac1b167fad995f99b7afc2c573f2ce6493e25411101dca79b6d2f1
MD = 216ea50997596f71edc94ed96e2b686628640f94a3c64adef05c2b63
Len = 976
Msg = 75c23e556178f00440533bcd25257934d0c6f5e68a64f1aa511bee9435c5277b02145fae1fdedce3b6b7b47015c547be55d00dfa3999920d586dbecf7ff95a775160d057308b32c661c17e5d6a772166bf69b9919ee91fe93877a50711939c85a9cf1ab65c28fa94879623faece20e1458b8821383fda2253762
MD = d1631028a8e0ec4adc689cabba8bf681d11e2e2a5059f293f7ef5be3
Len = 984
Msg = d23373b9405024d0c4b17aa503f7e2ff7d308083124ed2cbc4d990b9bee0d70b9635872fcfdaea58a2b696d1fd8c9492cd2ec11179ee755aae5663626219c0981348a8be50c9bdf77b061121cde246649af1f30bd7e84a93d952f8025f854d7bd3d59d0ecd07e6d4d909b23c7ae03fa06fe1de1c3424999fcc3618
MD = 726f6584ff9ea998ff326c9f73291ace8726d8697e7aa94f1ed42f7e
Len = 992
Msg = 6f057f91480fecee8a7e3879dbf8c52040f96f5929c6b8b6aea223b91843ddeba387a2288264df3d241d14b5b6bc7defe9bcf174f5060a88de1f86fff59fed52a3e574f2620922dc0c12316e5869b779a18e8697ea0a50bf20a50f169ed8a308f785bd98efe6fdf4cac4574dcae9bbe5f3d7f56a11bad282fc9c84a7
MD = 6b40e5c86db3d9c384c22a46cbef5f8e8c427bb6bf43268edd918aeb
Len = 1000
Msg = 6f77874dcad9479f5bcac3763662cc30cb99823c5ff469dcbd64c028286b0e579580fd3a17b56b099b97bf62d555798f7a250e08b0e4f238c3fcf684198bd48a68c208a6268be2bb416eda3011b523388bce8357b7f26122640420461abcabcb5004519adfa2d43db718bce7d0c8f1b4645c89315c65df1f0842e57412
MD = 0228626c63c20465d5139d1af0b9ce17e334ebe10a5eee2cafe96cb1
Len = 1008
Msg = ea841bd41b22e4c98b223332918eb791f51d1978540785f9c617675dbd02721831f7e7fdfa7714af7d671b588a64f49d8556b5d1c448116839771faf51a85dbb1bbff59fad8e3fe3c4eb8631aa050f505df85757ed9e9d1a26a8a0e96feeaa7af204cd23fd0e6d4ca8d5ff25b91a0f94c42a887297b230f6d5d57271e07c
MD = ff33c64231dedfc247e11e35aaf82d283a9ad62034102ee2bb5d4609
Len = 1016
Msg = 7216a825029da1c9a9328d499b3ff98f6e18b8af368e2b19efc1c0121b35b965ab282f55232356d7fad002fe3f0b6ab7833b2cb6f2e392b0c37414cbd3661e538c8613ae0c9291928303f775dd2a2445a27e825a1a3544a9b411eb3aa87d0fdcdcd85c170511db620e747296bdc3afa39489c181f5abc76a8a404e47e4a214
MD = 9440d3710b43e79899e116987366b2dd36b44b2f39e377fa2d4fe143
Len = 1024
Msg = 44a8508a3c3976d563e933705be4dbeebc726304b511203df7c7d1efceb6e06e91f1e57f3d8e6c105dfdf8262d984816fe7ad8f8dc95ab596fff48301f8d03137ba37dabdc4a6e664583a26b8edc42d3c2405516c51386c33a7f2875a3087702ca6721f56195053fe5263a29c8d8538dce6ce146b8b43ae520ee79a5a450c6a2
MD = a2743d341023ff5f775d90185d3139a7756b0a65c19ee876ebeb92ae
Len = 1032
Msg = a8ef4107f41ebbc5799a716b6b50e87c19e976042afca7702682e0a2398b42453430d15ed5c9d62448608212ed65d33a5ca2bcdca7728037df2e5f9fd9e974d0315dde8290241e3e2b2cc06f8c653ebc95bc2195c24d690caed42fe7d96589f3a85eae9bad995ab829e674abcfb8efaacb1eee5703f52b979d5d99a1c1694855a0
MD = b411a28ff46513d0c3d63cf78a9b6353466cba3b926a8d895ee14fdd
Len = 1040
Msg = f649d801b4040b7b5152f58a01e7852f565efc77b5dafe4607eee953b0ba6774c5573f1c79767121d94381c3ba9013ebef2fb8b0bf9f081f96ecf13cfad04e44c11ebb358160a89049bfad5e8e241d71689ddeecff0278063fd86b0ad475c6a25265f556b30ddb50078e216267edcd4a2b7016345d4b76806d7b02c625f3f717e0f6
MD = b94debadc833d5706cd4736bb1dc75039827832ae408859e2e6a6941
Len = 1048
Msg = eb71b45a494e76462edf41a9fdcbb3f46fb863b9e259d0c8f4a79898516eebe8c90c3ea5a675440f3c7b1a18c14dc20c5f3dd27788c66d448acd73226327f52cd65cecc8beaa2acfa34d90ef8bfe824e12ba9870bdc4965b8ced9ff9ce13a5bd39e824893af410d08ade0cf802e7dc02b0b71d6c2a5c3356229084e53b3ae4e51b384f
MD = fbbec05ee1fb5f5cd1106ed7384850059cdcda474ba7cec0407a272b
Len = 1056
Msg = 4eca0c51d30829b9a1d2712da1fac31f52942d77c9f20c2bf6d3751028d7d4f0d336d3dc92b27ec368caa4444b3180c1e37e98b58f25e647a9a6361f0b04cf78d17955766168eebaa993a435a88e0b39307423d6ead87f639afea75ba44bbc6bd0fb5ac84a12c2c6ed9539a7c0f9abb0c1dc9483e2f321a85244926dfd95e2f05624aa7a
MD = fe313eb74f955c0cbb1c446dd4ff853f32b3232d93faba7db6d1fab8
Len = 1064
Msg = 97784d14db62a7f98f5ac3df742e013489ec0b8777b05ef82bba06edc5c3a807b191c65513ca3fc7690615e56c2773c036edef29aac50c2211e20392018fc33d83c436f274f7c6062c3420025e7037993f1b8cddebf4aeb20421fc829c7fb23255372455c69244a0210e6a9e13b155a5ec9d6d0900e54a8f4d9f7a255e3a7fd06f1218e5d1
MD = 5504f39131773550b6f459f33a5b57a2ce60ce8bb78c574fef83dcf7
Len = 1072
Msg = 1ee9047351e2a13e4a2d5a826e304fef82241fbab5100835e1f850a20e51e34938b93dc852e58aab8adb0c3ccf61be9c90b53713c77ed0a5370309e6f19b290f1d642550f738c36818ddff74f77cae04af55617403b08c7a9f17e8fba0c21523575384b44ac4949e7c9dfbd1ef6a684f666c67856f8f84dba19cb38a23b0efad6eed229c536f
MD = b8f253512dabf9d89d2080830f23da5893b0f87edc0bd624ea767f14
Len = 1080
Msg = 1f363d2f7aa89e2b6c5e172f530d1a35531d0083a5acfcd232d64db06134b8232da2368f7a46ead9a9ce55cd6af8cdbdd1582b6bad56c52a15769c3f43dcd68da60f6e7232fd2aecfb3fcd00029f8e5c4ed7ca3b3f9cf68920dbd747fb43f532b1034d9f49d546aa893be68fc3084658f22343b9068877387b8f68903071fe5877083be068d626
MD = e59a19686df36bf5fe798a9565722b8e0bdd9f8eedbbb4a34a9ca7ab
Len = 1088
Msg = ecf5d9e29c1c04c11a9503cc223d0cee4866fa26df2b4f7c1a017939718f545746c0f137c9169692194105b2acf001e2f0e70f2332517a20c05899644af454cb8e00e5363593dc83f78d66bd0670ce8faa7244ff28d0de59e964dc68d87a30ec0ce03e49a73ce07dfea2ad54fa667bdfbe2f2222894d830dde4dc9aee3caefa4088683d7e8b9a966
MD = a886eb94f15df208be122912d4edf02561482278a9f847ddc91c9bd2
Len = 1096
Msg = 9f44357664b5e3a958780641cca52049f3b49f07484b5f762a5571f7c9541b4346f81fa416f04065a80003864754b3b54114a77a4938c8b21a9e4d3e5d59c9fccd4d68f699f975da099320ab655a7fb51328d2c6ff460b9b40858e99f88a35be7b6a97d6b4778af2c559e616ee608c32b018a753321e321be333bb6f618f666f9a7734ab3112859323
MD = 8839f755eee84e15c586b52e29a41ddc640ac432cf31370680987a44
Len = 1104
Msg = c1aa1266f223c148bfa3d0ab29f278334d8fcbfbf0f4ebef5c1b7a766b415155e1ea75d0fe2546115411faced7a04a27339b6bcd62e740697d06ce3cd2e0f00238c44c1d9faa85efebbbb3880313108124c5f3277c1f03ddf430a4bb4d88b67b6e3f7f96fc39e5aa2ca7e11fd5d1300aca144c5166269a1168a2e53c01c00b872c63f6833e5ace09bedf
MD = 439e3c7a0d655a30a9749afdefb7e048814335849df76d526c287727
Len = 1112
Msg = 0a367d3789827ccd4bef5fe8eb78c20503241f07fb8c41d81e97fb53f3891962ca3c976395ac11d1f9ba7b20a52912e8e3ed92466ca5aa808166ade737ba8a0213e8fee8d67608ee9aed9e821edc9e575f1f07c3686169656ae09a0a0f70abd10cc31a8ef6e7496d56102fd8ff984e9a9f44e54495c966cf028f2a8423b46419de54541d9a08bd9654ac98
MD = 40318036a595630e4135f10703be1d759a6c7e5146e0fc82abeba184
Len = 1120
Msg = 8a05b00ae2d5f652f02f98a1b035003f8fa7ba1b17fc3778cdb1cae35ae1f768ea16ed05d25f515f75a23db468348911d4a749c51ce39615c07892318233a667c7f00e973fae98e7c8e9a8b7902480d87ac5bef8c4252661e6e8a2e4bd8a870fe83b1aa773ed5352b2abe193702c6dfb4aa8239e55ea6fc507a704e2540e23c917a01a1cb4420b07fb90ee2e
MD = 9a26f054e57aea14242d7801f3d61ddca1523b738fc26fecfa5d9a6a
Len = 1128
Msg = ba6442c6d2139201dfef32c1ffb0ce92dd64091bd507c250595395e993d9a5124b5199640c2fe51482774b6a27d1a1751fe0d4fe5fd02dba152ed3c344fd9249af06da85f96f0bef0a8fefb1b501885b97f70dd842d12fa19befa03080c3d6b8ae2a0d13e2fc8bfc3fe1277ef0670cac0e52bb93c4344f6db13d05188d53fbc6106538f50ffdeda2e915fab921
MD = 58470da58476bcb89450c521fc396c6dc51b9fb6465c979aba5f8eb4
Len = 1136
Msg = 96fdb76f83bf12b3f4f322bf613fc38b2c8e0678856230418b6b062fb358488d6eed7c5c0656ec48c9bbf2da6a1473eea43faa68204f27239928172a3e49c52b58e861282c4401702337e5ce280aff00528eb26ac368db0cd0ad0eb262af226a9b16ef3bbd325614488f820363ca6ea77da4a7e8345554e57623732ee6326534819eadfe81c7f51d81ec51e1e3fc
MD = be92d4a6946de0e93d5bbe420651a8befb97cbdb5d63b22aaecf453d
Len = 1144
Msg = 0eef947f1e4f01cdb5481ca6eaa25f2caca4c401612888fecef52e283748c8dfc7b47259322c1f4f985f98f6ad44c13117f51e0517c0974d6c7b78af7419bcce957b8bc1db8801c5e280312ef78d6aa47a9cb98b866aaec3d5e26392dda6bbde3fece8a0628b30955b55f03711a8e1eb9e409a7cf84f56c8d0d0f8b9ba184c778fae90dc0f5c3329cb86dcf743bbae
MD = 98ec52c21cb988b1434b1653dd4ac806d118de6af1bb471c16577c34
Len = 1152
Msg = e65de91fdcb7606f14dbcfc94c9c94a57240a6b2c31ed410346c4dc011526559e44296fc988cc589de2dc713d0e82492d4991bd8c4c5e6c74c753fc09345225e1db8d565f0ce26f5f5d9f404a28cf00bd655a5fe04edb682942d675b86235f235965ad422ba5081a21865b8209ae81763e1c4c0cccbccdaad539cf773413a50f5ff1267b9238f5602adc06764f775d3c
MD = 26ec9df54d9afe11710772bfbeccc83d9d0439d3530777c81b8ae6a3

+ 408
- 0
strobe/python/kat/SHA3_256LongMsg.rsp
File diff suppressed because it is too large
View File


+ 310
- 0
strobe/python/kat/SHA3_256Monte.rsp View File

@@ -0,0 +1,310 @@
# CAVS 19.0
# "SHA3-256 Monte" information for "SHA3AllBytes1-28-16"
# SHA3-256 tests are configured for BYTE oriented implementations
# Length values represented in bits
# Generated on Thu Jan 28 13:32:45 2016
[L = 256]
Seed = aa64f7245e2177c654eb4de360da8761a516fdc7578c3498c5e582e096b8730c
COUNT = 0
MD = 225cbac2be6f329d94228c5360a1c177bc495a761c442a1771b1d18555c309a5
COUNT = 1
MD = 96d364a1b1ced3dbbce6380093fb1ac77221abcee30faf16546ffad8fe1eef8c
COUNT = 2
MD = 8d81a67598ff73e2305ed53b1e6d58c799a1d1908abf81a15eab4bfd35b96e51
COUNT = 3
MD = c71b506211ad3814e5d6f596a452c94dda511d6d3f3cda77041882aca3363708
COUNT = 4
MD = 804fb2ae90fe2d1a2f995b9d424f1ee4d92ceb6462d71fe05d3bc3275687c8ac
COUNT = 5
MD = 872265e74370558a0caf5bed4663a40a36ea14b3ab498d54d0d4d29cdd18c1c9
COUNT = 6
MD = 0d3e8b1276fb39ead94ee69a120e56ea3e8cd0436a4b46de58ed8db5cc02e2e1
COUNT = 7
MD = 5281ee56dd7e7b6d1bbebcd2393eb8de6b3dcbce38f1f892d80ed7015b36ae3d
COUNT = 8
MD = ac9381ebd23f32a57b811c541506b340875454a0cfe303b6a93a691d01f39e22
COUNT = 9
MD = bf7d7f341568aa0fbdc63e5f931185e0c6a6d522c5d86cd44cb27b1956d3a47e
COUNT = 10
MD = 13a0ea2b7c01f5da5120d86cb626e222a137fd53b60a87391183effc7332dcdd
COUNT = 11
MD = 0997572374ff8711539840f5c32fcab923b32a94c101f709b214386cf9e28c55
COUNT = 12
MD = 68dcc06346d43c34e39428839586228ca03a6afc87101a35a92508e7ddd97b2c
COUNT = 13
MD = 6d3f08f8d5d53cc092980c75d8992825d564b1f0557ccdba3d36dacda649a0d2
COUNT = 14
MD = acb740956b0c297c7ba93ed75c9ae2d770ceccaa268671cb6c5f779ea337edb5
COUNT = 15
MD = bca776fc02c138ae1aa9c7bad9c326f478d90f320232f270488bedf81c4e1d62
COUNT = 16
MD = c6170ed6a1cd137a56b88ea49931da5703fd0068c579a1ec59b5be9e63f2e6df
COUNT = 17
MD = 725333b1a3a9a460ea4ac73cd60c7e65b30740bc7c345cedeecfc2ed377ce484
COUNT = 18
MD = c81f200c8c101682f123b44d2608d2cea270fb3e7e8aa395f016810ba89b27ad
COUNT = 19
MD = d79a6f3dde5e053f342a2a2a9f844ddac71e5ff468a0d3276c81bd8126b3ee17
COUNT = 20
MD = 0c7f14428ee35003728ef697073f3422129653768ff4e5861d8d79a93e364b6a
COUNT = 21
MD = 7644dfdcf6f8ea827762c8a230bad47ce730a02f1845e669ba21f2f191493dce
COUNT = 22
MD = d2df3503c8f619d271384bed3987100a6ca9faf5a7592e7ff557898486956f1f
COUNT = 23
MD = 9e37d7ef189e6eac81770eb692926e9a3d2c5d578187689c31eeb3da5d7c5183
COUNT = 24
MD = 9e32047d1790838fc89ce97e3614f31c3da2f863ce7b3a68f3847c7f97f9272e
COUNT = 25
MD = c9b89d136d2b860fe892b4e37de8b7a4e19c49114b3457cba3bef8bb117d14c7
COUNT = 26
MD = a01e4086adc45a9944aedf333954b24daf813215ffed38bc0ba5667a4c19d9ef
COUNT = 27
MD = cce16e645ae14a6d0cdcf4c35627353c8ad3fbfef50c3fbd6205ca1959c1dca8
COUNT = 28
MD = 5c25e7747283c51709adb8058fe0a80626dd30c18f3c872e715e09081f487b2d
COUNT = 29
MD = e645d82344734a50fab4c5304452658f95c46b7fd2ce4acd9cbd9ecff5b69d9c
COUNT = 30
MD = 5165cebc2429ed67a52c33121afc784d39c4b062bc2ba996ef1de6d7dde9e657
COUNT = 31
MD = 3467af2ef9dad19c23aaeccdb0da0447e2b66821c02caa05ecd5e58bad2c9852
COUNT = 32
MD = c9cdfb5e41544b0111293181d2178e46b3a579e27e7d459d9b7fbf19f277b1e4
COUNT = 33
MD = fd6f6126f221f04b119f1b42da4a37eb96c304d993ef4dd9a80ad23948bc4683
COUNT = 34
MD = ce7b435ee9c83df626f1fec815d40bce5bf2763e13b69d556730dfb146b91b6d
COUNT = 35
MD = a733d5fc621a65b365fbf59fea7163e683bf5348e5552c55c9cea3b01f61a73c
COUNT = 36
MD = d2b076cfb5d715d47d62a46599c322ccf4ad75af93a2e5d6c2cea99cc3e02ea7
COUNT = 37
MD = f9292341cabcd4db57974ba7a0bf193bb831e4733b78b121d59c002d2bdded27
COUNT = 38
MD = 8de979b00f2aa1337dfc6f4d0faa4a795932267a9455cffb6c03c3d1d6c99ef4
COUNT = 39
MD = 5a1db7c17f6da1c5205404c62f658cb0d986e2ef29137c5a987c81b86e24431c
COUNT = 40
MD = ad37dc164141f0161a20cc41ad06c5bf96a0cd07d33756377c1d78a878fb3bb9
COUNT = 41
MD = 01b5f604094a5a61a4013d2ce7aabf2c1d1845fe9a1f4ffc778452ae5309a67a
COUNT = 42
MD = 17e58ccea2d2adc7b93805b54dfc76db06f078c312d9986b69a6c8fe97037dd1
COUNT = 43
MD = 8e16f09e24f926e7990588e6bc68f7d844d6e05cd865e10f5a3ba87cac2bc6ad
COUNT = 44
MD = f95518a1d7233b7af4e6d205adcae0ac26d74f70f9342d0221d65b8d73ad53bc
COUNT = 45
MD = bed31e5554b01582e2ed0c2ccc01028e535b2034a2f6292b60e591f861176e11
COUNT = 46
MD = b5b6a97f320a21ae56b14c704d8e704e4bead893e87a1cc02a8cde81366c033d
COUNT = 47
MD = 4ecc5e0426865bfa15b72d237bcb27840d318667701995cbde243ffe63a22f5a
COUNT = 48
MD = cdf72b4a14845cd0b4988d9c4985d08c2ab8f673885154c93ae85d6db15a25b7
COUNT = 49
MD = 9a757015d251d4e17eb7543843ad7e1dab88a6c488e359cbdac84d4c55371c00
COUNT = 50
MD = acda904cdf58c03e33add74668188a818b3ba12a19bbf8ed8ddb105503e90ab7
COUNT = 51
MD = d5a8450ab0d16402c0053a434e61acff3a0e136a7e82d85c74f456f4c92a70a9
COUNT = 52
MD = 74b23ba36cffdc0e3d88e457760c7157db667f95b6a48ba97aed7bdee95553b3
COUNT = 53
MD = 25a3b8de6e93e29bbec3538bb54491cd2afee1f9bd55d4bfd1f49197920d9562
COUNT = 54
MD = 8c9ffe70ccaa2305d72e46ac93a43cd512b1666fd336856c46e13b7bdb08a2e2
COUNT = 55
MD = 39b3516f8d3e6c8c0e6d5ac9e0098a44d63ab6514b848de4b654805a0cfefa76
COUNT = 56
MD = bf6a8f025e49e8a64e92cd16f71773866db3bb048a05b29fb02d9846c9fbc9f5
COUNT = 57
MD = 3f41fec1eb39ee06d0850353e483374e7bf34bb47febca616aaee067a28734b4
COUNT = 58
MD = be70c51e75ca2ae611b80bbe9c1720cdc1b8250e73399296851eadedcdc4f963
COUNT = 59
MD = c00ce2788f5ab3d14a492240ea54d05bac108353a2203436d3e0701c1b088262
COUNT = 60
MD = 26e5b345b7f8efd7d91ddc6ed602646450bedd3f6b20d77de02beb327be2d9bb
COUNT = 61
MD = 6978ad4035a5180a0781c656482fecbe7b9f1c430672b2135448148185a40e36
COUNT = 62
MD = 5b542f6a1e761632b3b48c2c40972f64ab0c5b80c0057e3cf9924324456f6d31
COUNT = 63
MD = ebc7da12bdfd0dd2d6fd09babcaf3ab9626a5ccb2e9a4f492dd15652fd2771f3
COUNT = 64
MD = 5db04d00d3dfd9be76b2c9694f6d5d8e720c5c79b29729e0c1631747c2cb9988
COUNT = 65
MD = b2788851c73b8c368e7f44e832e2913004a66131216da5ea0b12a1efe30f8979
COUNT = 66
MD = 667e4498275bdb7701883d22dc988e86aa419d8475329e199238d2121f819d28
COUNT = 67
MD = 6cad7e7563819f1a24269e3f031795185ce013d48e8fe3f9dee2a6f9e690c490
COUNT = 68
MD = 5224ec473d778622c13d93d285cab5704442ab6d8e8a5b93f272cd1018973951
COUNT = 69
MD = ef3896defc3f927251b4c790ce8f43e12a7ae465de5ee1db48c1ab7248978a16
COUNT = 70
MD = d3849407870aaf0fb2c49562e55da86557ad883dc0e96f9677e23658643c7a44
COUNT = 71
MD = fff968a20003fa69db3d10122c0ebca2cdfb6b39a32051bddd192f41d8636506
COUNT = 72
MD = a8c43a4c99884c145f133adbc2ee69ebe7a78baf43ad58335452284c334a1889
COUNT = 73
MD = d6ed4ac4975a0a990c4e58f5bddb28136967f935800a94c223582480142fd889
COUNT = 74
MD = 1f7644067012e64b7869d12b8ccd1f2d3a56bb3e872a138cc46ecefa7e59fd75
COUNT = 75
MD = 9e07c3aeda2c5a411ab7db4033e6d3e8637aa14373ed26daf8db20b41f986af0
COUNT = 76
MD = 09ef93fa940101e661b671957de823f08268a7475d3ac6e09316ada01adb75fc
COUNT = 77
MD = 8fd9f1b5b9d50ad1498d09306eafb4409e374c51b5e84901ee6650f0eb35a137
COUNT = 78
MD = 70674b941ea3fb733e8582948ae87c1ab47a0f6f3d7789399a6249bd45dc64da
COUNT = 79
MD = 93778d9f385f055b656638025cb6efb2f3f026e01c5af80ac02f8358f578a3fc
COUNT = 80
MD = c088ca1d2ec6ac466cec58fb1e8bfbaaa6909c5ce72c3de1b94b18405c4fce90
COUNT = 81
MD = 86e02620845de786fa19b92d7bd2b94a5e38972ca731496645bd3123faf44019
COUNT = 82
MD = b14fdb5df8e85263cfb82738f07dcfa3de5a76c9780bc67146d143bc94e8d17a
COUNT = 83
MD = 4b18899eb0e52fc7513251853b30d8bf17e772e469cae4a5a891660c585e208e
COUNT = 84
MD = 136dfe4353b42990906254b9215934c2569c5f31a6a25edccc896c6feda3bc0f
COUNT = 85
MD = 364ea962632ded4a9fa91fcd873c415bd5ec87ff80c688f23fbd5ec940fb44d9
COUNT = 86
MD = 90e2711334bdcea7778f296dfb7128c67c475863114f26747bab2abd4b7c67d7
COUNT = 87
MD = 641d974f46a605c7f806194206c671dc1e865386241e296228a8a70c58df122c
COUNT = 88
MD = 1a4e32585da9eddc7a6c05ee632587f6f7e5c269eda63f6bb67d662175e8ecbe
COUNT = 89
MD = 28150a432ffdc9bf6891a069153f1fffeb4515864713d1a01c2adce17d51d400
COUNT = 90
MD = 0bd9a7f5c0d89f7542013e323848442ada3a2b871d481188eb5bc060aeb82455
COUNT = 91
MD = b5797704dc1f661de1eefe865a42fb50809cd41ea7560770ddddb9f06427908d
COUNT = 92
MD = 6af71d9d6485d0fc51e91c2c226e365b8c981efd9c1bbbe1bd8da297f15aad3f
COUNT = 93
MD = c4b16828582f18fc90e06e3c9dbb4cf27e8a9b667f248e0a4578d68b8e0c3b3e
COUNT = 94
MD = a2911ec65759af2381fbaf933b122f2cfc8a2f5bf65400742264189cdb684e41
COUNT = 95
MD = da068cc480e629e65dca9c77c62465f8531ca8ab8d4b538cde556619113a6589
COUNT = 96
MD = b7c3a05dae2e7c5c046020e133ed5647f87d714a22c2a9bde947fbe2dc805c16
COUNT = 97
MD = a9da515a8324f3084b2b704148f0c529262d3a96d8dd9713cec21af5853d2583
COUNT = 98
MD = d202a76db6797ba1b6d3a01890d91305c84a27f7b3469e97692597caaffe246e
COUNT = 99
MD = 456f2ed7f5433bb4e56d7780a21a953e95d6a5eb53bb4c974c57a90e677f3197

+ 555
- 0
strobe/python/kat/SHA3_256ShortMsg.rsp View File

@@ -0,0 +1,555 @@
# CAVS 19.0
# "SHA3-256 ShortMsg" information for "SHA3AllBytes1-28-16"
# Length values represented in bits
# Generated on Thu Jan 28 13:32:44 2016
[L = 256]
Len = 0
Msg = 00
MD = a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a
Len = 8
Msg = e9
MD = f0d04dd1e6cfc29a4460d521796852f25d9ef8d28b44ee91ff5b759d72c1e6d6
Len = 16
Msg = d477
MD = 94279e8f5ccdf6e17f292b59698ab4e614dfe696a46c46da78305fc6a3146ab7
Len = 24
Msg = b053fa
MD = 9d0ff086cd0ec06a682c51c094dc73abdc492004292344bd41b82a60498ccfdb
Len = 32
Msg = e7372105
MD = 3a42b68ab079f28c4ca3c752296f279006c4fe78b1eb79d989777f051e4046ae
Len = 40
Msg = 0296f2c40a
MD = 53a018937221081d09ed0497377e32a1fa724025dfdc1871fa503d545df4b40d
Len = 48
Msg = e6fd42037f80
MD = 2294f8d3834f24aa9037c431f8c233a66a57b23fa3de10530bbb6911f6e1850f
Len = 56
Msg = 37b442385e0538
MD = cfa55031e716bbd7a83f2157513099e229a88891bb899d9ccd317191819998f8
Len = 64
Msg = 8bca931c8a132d2f
MD = dbb8be5dec1d715bd117b24566dc3f24f2cc0c799795d0638d9537481ef1e03e
Len = 72
Msg = fb8dfa3a132f9813ac
MD = fd09b3501888445ffc8c3bb95d106440ceee469415fce1474743273094306e2e
Len = 80
Msg = 71fbacdbf8541779c24a
MD = cc4e5a216b01f987f24ab9cad5eb196e89d32ed4aac85acb727e18e40ceef00e
Len = 88
Msg = 7e8f1fd1882e4a7c49e674
MD = 79bef78c78aa71e11a3375394c2562037cd0f82a033b48a6cc932cc43358fd9e
Len = 96
Msg = 5c56a6b18c39e66e1b7a993a
MD = b697556cb30d6df448ee38b973cb6942559de4c2567b1556240188c55ec0841c
Len = 104
Msg = 9c76ca5b6f8d1212d8e6896ad8
MD = 69dfc3a25865f3535f18b4a7bd9c0c69d78455f1fc1f4bf4e29fc82bf32818ec
Len = 112
Msg = 687ff7485b7eb51fe208f6ff9a1b
MD = fe7e68ae3e1a91944e4d1d2146d9360e5333c099a256f3711edc372bc6eeb226
Len = 120
Msg = 4149f41be1d265e668c536b85dde41
MD = 229a7702448c640f55dafed08a52aa0b1139657ba9fc4c5eb8587e174ecd9b92
Len = 128
Msg = d83c721ee51b060c5a41438a8221e040
MD = b87d9e4722edd3918729ded9a6d03af8256998ee088a1ae662ef4bcaff142a96
Len = 136
Msg = 266e8cbd3e73d80df2a49cfdaf0dc39cd1
MD = 6c2de3c95900a1bcec6bd4ca780056af4acf3aa36ee640474b6e870187f59361
Len = 144
Msg = a1d7ce5104eb25d6131bb8f66e1fb13f3523
MD = ee9062f39720b821b88be5e64621d7e0ca026a9fe7248d78150b14bdbaa40bed
Len = 152
Msg = d751ccd2cd65f27db539176920a70057a08a6b
MD = 7aaca80dbeb8dc3677d18b84795985463650d72f2543e0ec709c9e70b8cd7b79
Len = 160
Msg = b32dec58865ab74614ea982efb93c08d9acb1bb0
MD = 6a12e535dbfddab6d374058d92338e760b1a211451a6c09be9b61ee22f3bb467
Len = 168
Msg = 4e0cc4f5c6dcf0e2efca1f9f129372e2dcbca57ea6
MD = d2b7717864e9438dd02a4f8bb0203b77e2d3cd8f8ffcf9dc684e63de5ef39f0d
Len = 176
Msg = d16d978dfbaecf2c8a04090f6eebdb421a5a711137a6
MD = 7f497913318defdc60c924b3704b65ada7ca3ba203f23fb918c6fb03d4b0c0da
Len = 184
Msg = 47249c7cb85d8f0242ab240efd164b9c8b0bd3104bba3b
MD = 435e276f06ae73aa5d5d6018f58e0f009be351eada47b677c2f7c06455f384e7
Len = 192
Msg = cf549a383c0ac31eae870c40867eeb94fa1b6f3cac4473f2
MD = cdfd1afa793e48fd0ee5b34dfc53fbcee43e9d2ac21515e4746475453ab3831f
Len = 200
Msg = 9b3fdf8d448680840d6284f2997d3af55ffd85f6f4b33d7f8d
MD = 25005d10e84ff97c74a589013be42fb37f68db64bdfc7626efc0dd628077493a
Len = 208
Msg = 6b22fe94be2d0b2528d9847e127eb6c7d6967e7ec8b9660e77cc
MD = 157a52b0477639b3bc179667b35c1cdfbb3eef845e4486f0f84a526e940b518c
Len = 216
Msg = d8decafdad377904a2789551135e782e302aed8450a42cfb89600c
MD = 3ddecf5bba51643cd77ebde2141c8545f862067b209990d4cb65bfa65f4fa0c0
Len = 224
Msg = 938fe6afdbf14d1229e03576e532f078898769e20620ae2164f5abfa
MD = 9511abd13c756772b852114578ef9b96f9dc7d0f2b8dcde6ea7d1bd14c518890
Len = 232
Msg = 66eb5e7396f5b451a02f39699da4dbc50538fb10678ec39a5e28baa3c0
MD = 540acf81810a199996a612e885781308802fe460e9c638cc022e17076be8597a
Len = 240
Msg = de98968c8bd9408bd562ac6efbca2b10f5769aacaa01365763e1b2ce8048
MD = 6b2f2547781449d4fa158180a178ef68d7056121bf8a2f2f49891afc24978521
Len = 248
Msg = 94464e8fafd82f630e6aab9aa339d981db0a372dc5c1efb177305995ae2dc0
MD = ea7952ad759653cd47a18004ac2dbb9cf4a1e7bba8a530cf070570c711a634ea
Len = 256
Msg = c178ce0f720a6d73c6cf1caa905ee724d5ba941c2e2628136e3aad7d853733ba
MD = 64537b87892835ff0963ef9ad5145ab4cfce5d303a0cb0415b3b03f9d16e7d6b
Len = 264
Msg = 6ef70a3a21f9f7dc41c553c9b7ef70db82ca6994ac89b3627da4f521f07e1ae263
MD = 0afe03b175a1c9489663d8a6f66d1b24aba5139b996400b8bd3d0e1a79580e4d
Len = 272
Msg = 0c4a931ff7eace5ea7cd8d2a6761940838f30e43c5d1253299abd1bd903fed1e8b36
MD = dc5bebe05c499496a7ebfe04309cae515e3ea57c5d2a5fe2e6801243dd52c93b
Len = 280
Msg = 210f7b00bf8b4337b42450c721c3f781256359d208733846b97c0a4b7b044c38dbb219
MD = 3305c9d28e05288a2d13994d64c88d3506399cd62b2b544213cf3539a8e92e2e
Len = 288
Msg = 3cb8992759e2dc60ebb022bd8ee27f0f98039e6a9fe360373b48c7850ce113a0ff7b2ae5
MD = 3c00bf3e12ade9d2de2756506f809f147c8d6adc22e7bb666e0b1d26469e65a5
Len = 296
Msg = 22634f6ba7b4fccaa3ba4040b664dbe5a72bf394fb534e49c76ec4cdc223f4969e2d37e899
MD = a87e5c78837d7be0060d8f5eda975489ec961b28d7088f42a70f92414ae17793
Len = 304
Msg = 6e1dcd796b2015ee6760f98fdb40e668b2cf38b05c91f6a91e83bcc8ac59f816f90a59d64e8e
MD = 746bf845c08aa186b5fe1ca35528232c4a491a3a2a32cd23e990bc603f3268ae
Len = 312
Msg = ee0be20320f9d44073281265a6e9fa6b9d252495624b8d016b8ef57e1b4e859d8ad3b50b89416d
MD = a3257baf14ca16e1137dc5158703f3b02ebc74fc7677165fe86d4be1f38e2f7c
Len = 320
Msg = 8ae2da242635b6568289bf6bec8a438dbac1f5b4d50a90bb7449bdb92a59378e23452dbcabbbe879
MD = e25c44802c5cf2e9f633e683d37aa8c8db8a0e21c367808121d14d96c8a400b5
Len = 328
Msg = bdd0252dec5b798ef20e51791a18e8ca234d9bfde632a9e5395337a112dd97cdf068c9f57615424f59
MD = e02c1b197979c44a5a50d05ea4882c16d8205c2e3344265f8fe0e80aed06c065
Len = 336
Msg = c4c7b6315cb60b0e6cd01ef0b65f6486fdae4b94c6be21465c3a31c416ad2f06dcf3d6eae8eecf84ca7a
MD = 2da21867cd6b5402d3caff92a05fddfca90199fd51a94a066af164ce3d36c949
Len = 344
Msg = b17977aced3a1184b14b0e41a04dd8b513c925ca19211e1abdc6c1b987ac845545fb3b820a083b4f7883c0
MD = f91b016d013ede8d6a2e1efd4c0dd99417da8b0222d787867ca02b0ea2e80e45
Len = 352
Msg = f65c3aa1d9981a84e49fc86d938f3f756f60e3858d5e1f6957dd4d268e28d68e90ba9a11d7b192d6c37fb30b
MD = 3acbebf8eda9d3c99a6b6b666366c391e8200d55fd33ad8680734def1dc7ae85
Len = 360
Msg = 49abba1fa98f3c4470d5dd4ed36924af4a7ad62f4c2dd13e599238883ed7d0cb95bbaae58b460332e6b7681446
MD = 02bcd9ea4f1aa5276f38e30351a14a072bc5d53a52d04d559a65ca46f1bcb56e
Len = 368
Msg = 275645b5a2514fe65a82efac57e406f224e0259677674f1d133f00a5ee9a6d1a8fed0eadbbff5a825041d2a9715d
MD = c70a874d786cd0f3f09fa4dc1bb8f551d45f26d77ad63de1a9fdfb3b7c09c041
Len = 376
Msg = cd02b32107b9a640fc1bf439ac81a5c27d037c6076e1cfe6ad229638037ac1550e71cf9557c29c2fc6017afd5a8184
MD = 36c73d11d450784eb99af068cd4e1cbc5768c8a2118010aceec6d852dda80d95
Len = 384
Msg = 5a72e0e1aec82a6541f04883bb463b0c39c22b59431cfb8bfd332117a1afb5832ce5c76a58fcf6c6cb4e3e6f8e1112de
MD = 90fc3193552ec71d3315ebbb807913afd4cd2f0833a65e40d011d64de5e66513
Len = 392
Msg = 43402165911890719f9179f883bbbc2a3be77682e60dd24b356a22621c6d2e3dcdd4cb2ce613b0dfe9f58629ee853e0394
MD = 5c4b6ceac9441defa99b10b805a725d4018b74b3e1f24ad8934fc89b41b8fd9e
Len = 400
Msg = fc56ca9a93982a4669ccaba6e3d184a19de4ce800bb643a360c14572aedb22974f0c966b859d91ad5d713b7ad99935794d22
MD = e21806ce766bbce8b8d1b99bcf162fd154f54692351aec8e6914e1a694bda9ee
Len = 408
Msg = ace6297e50d50a11388118efc88ef97209b11e9dfcb7ad482fc9bf7d8deecc237ad163d920c51f250306d6cedc411386a457c7
MD = f5581403a082bbf5ad7e09bdfccc43bf9683ebc88291d71d9ce885a37e952bd6
Len = 416
Msg = 3bad18046e9424de24e12944cd992cfba4556f0b2ae88b7bd342be5cff9586092bb66fac69c529040d10dd66aa35c1023d87eb68
MD = faed76ff5a1cd99183b311e502c54e516d70a87050cf8961c8cd46f65c1358cd
Len = 424
Msg = e564c9a1f1aaf8545a259f52c3fd1821ed03c22fd7424a0b2ad629d5d3026ef4f27cbe06f30b991dfa54de2885f192af4dc4ddc46d
MD = 811529c600c9d780f796a29a6b3e89f8a12b3f29c36f72b06cca7edc36f48dc0
Len = 432
Msg = 6043fa6465d69cab45520af5f0fd46c81dbf677531799802629863681cea30ffa3b00836fbf49f87051d92aaeac0ed09bcb9f0755b7b
MD = b0fceecdaef6c76d5fc3835b523ce2416f4a9b9bd1f90234445df0f2b689f2f5
Len = 440
Msg = 2040c538c79237e6f2b8188c6375ec2f610ac2301607b9c23660c3a1e1c3a902cb2950c59aac3af28f984f6369c4debe8623dfa74c967b
MD = e33dbdc0acc23fcfad3c759c4333410bd3a40efb1366ade157d2c81d65a0a6c7
Len = 448
Msg = 00ff6c96b7aa3cf27d036cf20af7031434113252574bda9cf9244d85aef2593d3a7a83bff6be904b75164a1766828042bc3f4f090d98a03d
MD = d000eafca34815783bed9b050c6901c97f2e77d4771a0ed724dd8f6ff1448791
Len = 456
Msg = e8df14936cce118139e690f1662f88cfbc9c333b6dea658c02cb1d959644592842542fd9d8d61a04d4a892128f0ddff7b6502efffbabe5cb0a
MD = 3479a9617a3adca35854c08fe987c2fe7ff2b01b04f2d952c107b3f066420551
Len = 464
Msg = 4ed981a31f70dd6b70c161be1f01fc1bba54d06d9494e7eb194e213d5e0e71e0fddd49cb1f075353da22624cbe4ba871aab32906e45b6fbb691b
MD = 9c824a00e068d2fda73f9c2e7798e8d9394f57f94df0edeb132e78e8a379a0cf
Len = 472
Msg = 7802b70c6158bc26d5f157671c3f3d81ab399db552b9f851b72333770348eb1fdb8a085f924095eb9d5ccfd8474b7ba5a61c7d7bcde5a7b44362cf
MD = fa9726ccb068c0adb5d20079c35a318b3d951eb43b196c509ab790b7e9202207
Len = 480
Msg = ff83dcd7c1a488e5a128d5b746284552f1f2c091615d9519f459bc9010ca5e0ac19796c4a3fd7a15032a55a1410737d07855b07f61fbd8f5759e9218
MD = 8bd8d494a41acda4b7cd2994badaecff0f46ba2743458f6c3fdc0226f9492ede
Len = 488
Msg = afd4764cc7d5de16a3cf80c51d0c0d919f18700c7dc9bc4e887d634fe0a3aa94097d590e4123b73f11ccb59e23496a3d53d2bfa908056c11c52c23abfb
MD = e9e3b3da648cf230f1973f3814eb81316d2a496826ea39adf4674576f97e1167
Len = 496
Msg = 6fa6de509719ffbf17759f051453c0ac3cbe13346546bbc17050541074b034af197af06e41142211ee906a476039b3e07d6cb83a76aac6fca8eac307c034
MD = 766630993fbb651fd8d3603e3eebc81931fb1302a46791df259a6e13ca2cba9f
Len = 504
Msg = 93cbb7e47c8859bef939155bea488090283ecf5023d99767c960d86baa333af05aa696fc170fb8bbac1e6473956d96b964580ee6640f0cc57be9598e55fc86
MD = d3212abca1100eb7658c0f916daf2692c57a47b772ee031c4ec6ad28a4a46de9
Len = 512
Msg = 67e384d209f1bc449fa67da6ce5fbbe84f4610129f2f0b40f7c0caea7ed5cb69be22ffb7541b2077ec1045356d9db4ee7141f7d3f84d324a5d00b33689f0cb78
MD = 9c9160268608ef09fe0bd3927d3dffa0c73499c528943e837be467b50e5c1f1e
Len = 520
Msg = 4bef1a43faacc3e38412c875360606a8115d9197d59f61a85e0b48b433db27695dc962ed75d191c4013979f401cf3a67c472c99000d3a152227db61de313ab5a1c
MD = 8703a1f7424c3535f1d4f88c9b03d194893499478969fbb0a5dc2808a069ab8f
Len = 528
Msg = f0be5e961bb55b3a9452a536504f612a3e66aec8160a882e5156eb7278433b7ea21de31e39383d57fcdfb2fb4a8d227a9d6085fb55cad3abb78a225535da0e34efea
MD = 2fa180209bf6b4ad13c357d917fabb3e52c101a0cdb3f2299fa0f7f81dfb848e
Len = 536
Msg = 206f1c36ba25aea73398fffc9b65c4637cc1f05a6bbee014dccbd61e3b7aa9423887bbac62152a4bf73a4b7afabe54e08720589464da7985d8e6591ac081d115df2fe6
MD = 558ea7c800b687380cce7e06006e1ebe0b89973f788c4caac5780f22dbf382e8
Len = 544
Msg = 8cd71434c00663f3bda0205508a4a266548dc69e00ca91fde06d165b40279af92674f75bd8133e5a9eb9a075c9068f68f4b820008a1fb42d89d1d759859e68f8efc6fb60
MD = 085b343b08516f320a9b90fe50440a8bc51ae0850fa38d88724a4d6bd3df1ad4
Len = 552
Msg = 4cf5bbd91cac61c21102052634e99faedd6cdddcd4426b42b6a372f29a5a5f35f51ce580bb1845a3c7cfcd447d269e8caeb9b320bb731f53fe5c969a65b12f40603a685afe
MD = f9dbb88c5bb4415e17dee9222174538eeab371b12d8d572cfdf55b806e3158e4
Len = 560
Msg = e00e46c96dec5cb36cf4732048376657bcd1eff08ccc05df734168ae5cc07a0ad5f25081c07d098a4b285ec623407b85e53a0d8cd6999d16d3131c188befbfc9ebb10d62daf9
MD = 3571326a1577c400b967ac1c26df2a0dcf5db7070eac262a8071da16afa7c419
Len = 568
Msg = 981f41a83d8f17f71fc03f915a30cd8ac91d99aa1b49ef5c29fb88c68646b93a588debcd67474b457400c339cca028731df0b599875ab80df6f18b11b0b1c62f2a07b3d8209402
MD = 62aea8760759a996f4d855e99bcd79e9a57ea362522d9b42fd82c12c9294a217
Len = 576
Msg = 5c589fc54fefc4d6e2249a36583e1992fc6b8a9c070e8e00c45a639af22063e66ae5cdb80238c82db043a5e1f39f65626e6d7be5d6a2d3380fa212f89211200412e5e4315fc04e40
MD = 18deba74e9d93ae7df93c6c316ef201bf5e3a661e68868e14d4f56264f5d858c
Len = 584
Msg = 7c8691e7b2560fe87fcc5e2877f7e3c84d9101eca4818f6322a58986c6cf05627c0d6919ef2edc859f81fa1f33e0cc1f10edf7e52a9c33981af2ff0d720c94ea4d62170b2a4d1224fa
MD = 5a5a438b57c1b3ce8756094252362afeaa9fc91cd45b385d16994ec8af49aa6b
Len = 592
Msg = 97359b564b2bc20800ed1e5151b4d2581a0427ce9539d324c3637cfb0e5378dc2cf6d72946e2a3535a2f664ede88ed42a6814c84072b22c43de71e880a77c2d9a05b673bc15a82e3255f
MD = be54f2e435f760d5b77c0ae61ef0aa7f5f3366f47819f350dc8a39aff8c73a8f
Len = 600
Msg = a0dfaecd3e307c5ddf9a93603f7e19725a779218734904525b14586ff0ce0425e4efe7e1c06e745c28ed136f6031c4280fd4061d433ef700b6d1bc745064231fecf387015f94f504b6ad8c
MD = 60d80f1c703dad5da93db222fb45fb7fa768c8aa2787f4b81f1e00365b8f49e2
Len = 608
Msg = 568d66d061306c3419a1928ce7edc8e3400c30998f09bdac6f63ff351eb23d362e8dc5927eac805d694ac9563dcd7fb2efa9591c0d827af9f39146f0424873aa8e3963d65734b1713baf0a44
MD = 7a4fe37f296991121792dd7c2c30390725a1eebbf20b766a5a1c3c6c3646d996
Len = 616
Msg = d65b9f881d1fc7f17d6dd429faca8404e6ce60fba7d89b7fba003c8ef84d8083182979327611fc341291ba80dc70ad3b2f28b6d29b988445e7fdb7c6561f45822ac81dbf677a0b27d961dc6358
MD = 51cc71b6934afcf28fa49942b76323f36cd6a0aecc5a0e49c10994ddcabdbb80
Len = 624
Msg = 711c88adf13e7a0e694652f2b9a397543f4937fafb4ccca7f1ad1d93cf74e818d0fedfaee099f019014ec9e1edfe9c03fdb11fe6492ad89011bf971a5c674461de15daff1f44b47adad308baa314
MD = 1780e52e306858478290c46b04d8068f078a7f6ad8e3790a68fc40dccfbdadc9
Len = 632
Msg = f714a27cd2d1bc754f5e4972ab940d366a754e029b6536655d977956a2c53880332424ddf597e6866a22bfca7aa26b7d74bc4c925014c4ed37bfe37245fa42628d1c2ee75dc909edc469ee3452d894
MD = f4afa72f3e489ad473dc247aae353da99fb005b490e2c4e1f5bd16a99732b100
Len = 640
Msg = fe0c3280422c4ef6c82116e947da89f344d6ff997bf1aec6807e7379a695d0ba20ae31d2666f73bbdbc3a6d6ac2c12dcfb5a79173dfc9cd2e0d6000e3114f2767edec995772c6b47dadc136d500251e5
MD = 89198e2363efd4e0ba7a8a45f690f02712e6f856668517bae118d11e9a9dc7cc
Len = 648
Msg = 02e238461d0a99d49c4cd16f442edf682c39b93114fc3d79f8546a99e5ead02f0cfc45081561da44b5c70eb48340418707fd6b2614580d5c581868ba32f1ee3ac34bf6224845b32ba7f867e34700d45025
MD = abef81b33591eedcac0cf32fb5a91c931f2d719c37801409133552170ce50dbf
Len = 656
Msg = fb7c8cd4031007f8159d5c4c6120dee6777a3ace0a245b56f31e8aae7828dab3cf35c308de1d0d684592ef3a9e55796603a92f68d109f7a3ac1635f7c4d334955614c812753431bb0a0743291a0fc41547f3
MD = 5a67284d39e4f37caa64ca1a54593c35f6d8f3a3ec20d460393a39f6f57c4486
Len = 664
Msg = 6b2e868c7d0ee1c240d3a67e2fdf36e8e23817c02644a54453d10454da5859d41e833a5285ec63e8ce28aa64a50435a7740eea4b7d5827892678b35993d3f5da7a1c64f533173f3d0fa37e1aebf70827052c26
MD = aecf5dab6fea9ffd1bce2cdfeec0bee9d214a669e8306d5b6688afa8957fc91f
Len = 672
Msg = e5f3ba000c43bb6aca4e0a711a75912a48241cffa5b4b0b17f901f9e5097d94036c205f7a307d008567d05e58ac0dfaf6d971bf9d3d450cf2c7c83f6b328f676e9ab425642f5a5a71e389dc4fa49b6d7e848a09f
MD = 182d6e4316f4bc18d7163b1b21462d99f99c6f34d2c00ee771ce54fd6c5018b9
Len = 680
Msg = 939c61e68af5e2fdb75a2eebb159a85b0c87a126ce22701622f5c5ef517c3ab0ed492b1650a6c862457c685c04732198645b95f84ccb0e726a07ce132827a044dc76b34d3f19a81721f1ea365bc23e2604949bd5e8
MD = 121057b0b9a627be07dc54e7d1b719f0a3df9d20d29a03a38b5df0a51503df93
Len = 688
Msg = 9eadaf4811a604c65eaa7b1c6e89f2c0ab96bebec25a950ba78aac16d9371ca1e7458acf331e077ef6a735d68474ab22d2389bdf357fb2136c9f40e1e1eb99592c2bbb95d94931016b4d37faa08b1e9bf71bf2d3708a
MD = c237194b902e48dca5bd096cb51562079d0cdccb2af8088197676c17b0896be2
Len = 696
Msg = 71dcca239dced2ac5cc49a9bf9ea69a99be22ba62216716b524db80f337dee5eb7e032869e4adc1497babd1fa82fa8c3cfbd30d2eadfb4c5d40f99f9d194d7182c9cb7d41e8adbdcf2917e086782fdd756e2961c944070
MD = 377d1cffb626735810b613fd31ef9bbb4577cd752521abe3a41afa921e623da0
Len = 704
Msg = ea130d3236bca7dffb4b9e50e805309a503e7347227aeb9f1bd15c263a98dd65753d2eedaa734b9ad88f41158f32419ca529f3062b910c019f3f239f635fc1116e5ab7b242feb4471ed9168474e501d39d6bae52cc21061a
MD = 85c7a52d53f7b41162ea9f1ef0d07c3fb8f0ec621617f88cb3828ebe5388ab3d
Len = 712
Msg = 28f1be1156792af95c6f72e971bf1b64e0127b7653ff1e8c527f698907a27d1544815e38c7745529bc859260832416f2b41cd01e60c506239a7bf7553650bf70d1fe7a2c1220ac122ea1e18db27490447d8545a70bf0ffc8fa
MD = b2eb3762a743d252567796692863b55636cb088e75527efd7306a2f6e3a48a85
Len = 720
Msg = c8400ef09c13e8acc8a72258f5d1d20302c6e43b53250c2f6c38ff15be77e3cac04d04b8421fc8fdff8be5ca71edd108e9287b42dea338bf859100eea376da08a0e695f0dc90b95e467cbd3c2a917a504a5ae01c310ae802c4bd
MD = 69966e89b7bc7f39cd85791b92180ff3fed658d8240e393e1e6d7c24b8d0ac95
Len = 728
Msg = a48950c961438e09f4d054ac66a498e5f1a4f6eabfde9b4bf5776182f0e43bcbce5dd436318f73fa3f92220cee1a0ff07ef132d047a530cbb47e808f90b2cc2a80dc9a1dd1ab2bb274d7a390475a6b8d97dcd4c3e26ffde6e17cf6
MD = 44c00cf622beca0fad08539ea466dcbe4476aef6b277c450ce8282fbc9a49111
Len = 736
Msg = e543edcff8c094c0b329c8190b31c03fa86f06ace957918728692d783fa824ba4a4e1772afbe2d3f5cba701250d673405d2c38d52c52522c818947bcc0373835b198c4cc80b029d20884ac8c50893c3f565d528a0cb51bf8a197d9d6
MD = 6d5260384f3cefd3758fb900dcba3730d2b23cee03d197abeff01369dc73c180
Len = 744
Msg = 4e10ab631718aa5f6e69ee2c7e17908ec82cb81667e508f6981f3814790cfd5d112a305c91762c0bd9dd78e93ef3a64c8be77af945b74ff234a0b78f1ed962d0d68041f276d5ea40e8a63f2cab0a4a9ed3526c8c523db7cb776b9825b4
MD = d88e5f3b2d0a698fd943233760a3000a3360d9040e7374b22e39ea58d868102d
Len = 752
Msg = 604d8842855354811cd736d95c7f46d043a194048b64bf6cda22c3e0391113dcc723e881ae2ad8dc5740aa6bda6669ddb96bb71acd10648380693f7b3d862c262553777004bd6852831618519fbb824759f4dd65af1b2a79cc01096d7c8d
MD = 8a8ab6cf5c02b9ae8f4c170740eff1592f3eda11d3420ac8b421d93cfbb35db8
Len = 760
Msg = 628180e14f41ebdfde3b4439de55ee9cd743d41040f3457ef2280370dd659619fa0ce69580c709725b275a6eda8bcb82a8447c20fdf68cba15412f83e2a10079fe9399a3e3fa61975ec0a64041c0ecde59e4844e9f8a608cb22d2576854182
MD = 8d154bf6f9cb72efc0d8b3927a8f690060d1d48bbe5cc72094d2c8b149a75132
Len = 768
Msg = fc150b1619d5c344d615e86fca1a723f4eeb24fbe21b12facde3615a04744ef54d8a7191a4454357de35df878cb305692278648759681919d1af73c1fb0ff9783678aec838da933db0376e1629fcca3f32913f84bc2ff3ffc3f261d2312f591c
MD = 3f626c8bb20a132495bd3022b3fcd0ce0604b91a9d70132dab4099f73dde23d5
Len = 776
Msg = 6dadbecdd15e5646e3f37a6fe5b328e06113cce3c8cf07285939afba44d117321017902b3a9d2ff51f60d18e1b585dcdf34e49e170ee60fa4d1dc246548d2c1fc38e7983f42769c43d65a28016f3f4d479ebe1cd8fec5d1f886dd21aca5067d94f
MD = 9098ea34c40b541b153e80a8bd92da19432b18b7d329760b302f8a54c395dd06
Len = 784
Msg = 9cc5fd3035b72dc63b8c3c326fd013081e6b8716f526d3fe176b45256d4c37cc3dc8417dff49ada96c702b8fd715c65fc08a17a0a720b9cf1eedfd4922ccde6baba437f782ee33b95371056b0350dad743470c3b663299f16fcfd34f6fc459cd0ee4
MD = b0c04f24bb6d3d4fcbfdf9222d0e886f1eb60a0566a478085f7623a025a5b981
Len = 792
Msg = f3f063fbcf2d74aa5a02d240c962ed7bb119b3a212bdb41594e28428108e613152ed16e01e451fcf702b0e5a08f82eb12677652b93e05fdee00ae86cf2dc9a1fbf05b93952ec5b8515eacc324fb830e1ec236afd7d073d4b7f7ab1c2e048b99cbfa012
MD = f930d79360b581b1bbfdeac57133a339444f5c44538c921631eabaf058277d32
Len = 800
Msg = 840739a3d6992c13ec63e6dbf46f9d6875b2bd87d8878a7b265c074e13ab17643c2de356ad4a7bfda6d3c0cc9ff381638963e46257de087bbdd5e8cc3763836b4e833a421781791dfcae9901be5805c0bbf99cca6daf574634ec2c61556f32e642730510
MD = 19795657e08cfbb247a17cf209a4905f46e4ddf58eea47feee0be9bb9f5c460f
Len = 808
Msg = 4a51b49393ab4d1b44fb6dc6628855a34e7c94d13b8b2142e5d5a7bf810e202cefdca50e3780844a33b9942f89e5c5b7dd6afb0a44541d44fb40687859780af5025fecc85e10cf8249429a3b0c6ff2d68c350c87c2fcbf936bd9de5701b2c48ce9a330c9ee
MD = 128fb4114e43eefd19277c708be9e6873e66d7fd59c58a1485b7b015facfa795
Len = 816
Msg = afc309e6b7b74dfb0d368e3894266fc4a706c3325e21f5550d07a6560e3d9703c134ca6ad078e4a7b82ad6fa85b0bc1ddcab05d43f29d5c58d1da78ac80c37051b089ff31ce2c0c44e9ce3abea1da0f1df28008e178fdefafca493413bf1d256c729d0a9225e
MD = 03e782b01a4ba10f640470bb3cae487eb9cbbaab8c9941978b194f6a312cf79e
Len = 824
Msg = c5ae750f2230642092397b84ad5526c46ae9480ada16892816e0f2db7690b751035653ea2f33da3cc4168b591b46a5548eff7d012f60ccfdbb854deec9f0880c472de8e127b5144c56147cccee4732fbac68fc59a48da74b33ed9e643644bbe279795c7c737eba
MD = f64b7ab243ce6e6c04b483888ba8a655465c21d95eb60c7b8d6e566a3811bae2
Len = 832
Msg = 603e13f61499e12ec6b33b68847a281d314f54dc705c0f3fc428981ff5689c04b519fadf83cbc9fcd0409c326035045df480570e265bb080940037ce4076a36437aafdb371c1a62af9ad9b614dfef89708fbbb5ebef2cb9528cc399781e4c5b22f1aa4dba623809f
MD = 5f76962fd3d373e5db2953c0823a51fe81f874450bedf7e46876394b04d3ef66
Len = 840
Msg = e03115cfa19efcd796da389063c4be6acce684d983f8edfb3da6887b0b94fbb5e89e3a1a8e64fdd68f0670b1a02c2c33384a660c5a2266b3ae8a3b4cd76faecf011a7467b9b2a818020278a5a57d1eb1c87f1224c2d67dd02e81f1553eb75841532c2b7cca8fe5e418
MD = d107ee6ee4a58871a33c49657faa2573e475f11918c4a4e3801d0e17fb93c6e3
Len = 848
Msg = 0e6c1d58b1b9d3a2d399aafd60529e07d483a2755bb7e44c373b5355632d5fca76d6ff56c93af93ddcec5ed6f62753420c1b1758e48542df7b824b00a3a54dfaf0470b18d51e31e10b12dd8e324b5dc1bb8f3b7305cb762ec6ef137dadffd4a2466748861d9004f626b0
MD = 02ab2dbb02944354799051247b1a25c19f3696e1afcb502b859e83798b33fd77
Len = 856
Msg = 6db2a43a229b10c3629249fc5136468b4d84df7b89ec90ebf7aa7a036c53aa2dffae9e81b2c60580543dc706a5e3457abc87e248a60ec29150c2d221a6ec08a1fda4ec0daee8576904ec7ab059b1230e7bd93c4e55ba9496cbb1e352e5b8086e303b94c861288ce53c466b
MD = 8cc4d39b2f5ba0bc9d2ee2a8777cf08533e60cc69b65a7b31c5c2121193aa31e
Len = 864
Msg = 31d995f7ff8b6de70829a8336c610f10df2c866107a4922b25151849f8566861df5a79163d02767f21357ad82733997899261f03dafb1ce1056f20efd16d4374b89768565823c38e19e899d910b847b023f1867b6e4fed02e604b8243c0bc7cb05b9ea1f17955bfa36698c9c
MD = c99c7191b34c9ad3f941d4ad442cc865205cbb4c2a6927c592e831cbc4d36fcf
Len = 872
Msg = cb0b8cb7de621c8e0a0fc6be2fc18d0e8818a2c2dd0b3219fa87831a61583f903c4d105495976ccac973b3ae3a09771145931a9e74c19f22f45cba4c492b29b1401347122581dfe2370d3e0359578cd10a355c619711810a8f8c232578671312c0a45c7cf7e81bdd3b249044f3
MD = 6d2f57a7e42b35369cf2cd60caf9e65aca7d9aa019e6824bb806348f1acf3c7c
Len = 880
Msg = 48dff78aed5f6e823054924a78dc1b8e51a117f1610181529f6d164ebf0f6406f0b02422cad8c916823759a361437ca17423d3fd84cc8afe486a31ccda01c732685418a32c064a7b9effb288e811ecc99adb2a759feecc3f702f31d9877dcdb717937c15fa2f163bea744400f58c
MD = 14b631f0f00a3024ad1810dabf02711e28449668abe27f69380942268968d4f6
Len = 888
Msg = 06cc9fa542ceb35c88fb6ab82c29d5dcd530f807d3f1c3bcb3974421101d1aa6ac112de6bf979cd28eb0f70c40bcaf91ed3eca9bf9e0dbc6a0b73271d1c7506740ca9ebfb72d5e00ac5ce189193ffa308804b42a6d20402bb99031cdac65ec36eb7f59f5d299df2e0b8690f760b9a0
MD = 574fd82a9fceb8f7bbbf244d16e0412cbda8153b720846c32b8f10fe5779a881
Len = 896
Msg = 8d93627c0b7cbf61a7fe70e78c2c8ed23b1344b4cfed31bd85980dd37b4690e5b8758f7d6d2269957a39a1ac3451cc196696ae9e9606a04089e13456095a1ce1e593481b3ac84f53f1cb10f789b099f316c948398ad52fa13474bdf486de9b431bd5d57ef9d83a42139a05f112b2bd08
MD = 344ec86642eabb206b2fd930e4c5dde78aa878577d6c271cb0069d4999495652
Len = 904
Msg = d0af484b8be6b41c1971ae9d90650a1e894356c9191d6be303fa424f2b7c09544ec076a0f1865c8c97927ca137529d5bedc0df2ef08a4cc7c470b094b1eeaa86731c041633d24086b60f7369d59c57652dec9b3817477df9db289ba020e306c9a78a99b539128992deb23cfc508c5fc3af
MD = b7ba998726477c32792e9c3eddc1cb6feb7c3933e49f2e7590d8ce7a2113e6f8
Len = 912
Msg = b212f7ef04ffcdcf72c39a6309486c0eeb390ff8f218d6bd978b976612f7f898c350e90bd130723e1126af69295019b4f52c06a629ab74e03887020b75d73f0f78e12785c42feb70a7e5f12761511c9688c44da6aaa02afa35b31edc94c3a0779b6ab9462525c0ccfba76986f873fe1e6ba9
MD = 2f26b96c1fa3f3dee728f17584e733b4189821c659b8885a5fb1d12d60d2aaa9
Len = 920
Msg = 86591ada83fba8175a0fe91d264e7f9b2df97ee4c32570e76b579d6140508951932abdadd6a4ca53b8bb8c42927aac0a02126881d52d97b82b80e72dd59f6a42021651ee1bb5f7b3eb2b21d003d784b75dda87c13f714b216282e8175474fa661b445d071bd5341f3a88302f410d0f8a857962
MD = e3edbc8c42ce5d2384dfb24fb1de5d4798b1bc3cc78c97033894040dfa6feb6c
Len = 928
Msg = 92b5a8e84b6a2ac4d5b1e61d63804abd641dd630058ec6d5f752f135724ef1947a0a84c6611d32448de6307f7b7d857404e96b81df94f87768fcfdf09faa2fe37468847542afe012995ff1bd40b257a47a7309f8896bf4fb711de55bfeb3a8be0837729ef6067c578182f17ebb080a754f22773c
MD = 80ed0a702812297c2aa1b6b4b530c2b5ed17ecfba6d51791cf152d4303ced2e6
Len = 936
Msg = d284a0a9a4de5d4c68cc23884c95ad7619aa39b20a2cf401deaeb3362c3ce356f79cc3fa82d3d1f565ec8137e1f435f171496afaa1152f722315dca5209f0031cce39b6c3d718e007dfb4fd8de5ce1408dda04476aa8a96817afa86a4f8fb5857ae091c67ebd7db5d783f434ead699aa96e56f610d
MD = 654eccefd0a4fdb2ac0ab56288c64399b37bc4d57ff4a9f1cce94362fc491bda
Len = 944
Msg = f57f0f8795385b805246a0a2573afc274346a9eccf50c626b0455a50bfb09668578b5a5afe54fbbd486444bdf97dba586aa224ce2e2b4b52f418ff06afa65a26f5204983a5f84734cd166c88cb70a73fb2db48f9ef20c1ee2c53ade07460114e98e7e2ebd24ac84ea90422eb143c4a42e2991a565959
MD = 135ec8b144a667dceae8fadd287df81c10ef3ebef87ff2fb56e60ae708a88f3b
Len = 952
Msg = 2a41a52e6578873588a57f11f1be7c7eb398d01f3bfdec2c33fe6b65a68a534a6540978daa82e0c8fccb8c6c5242f7f97b8ffa75bdedb217bd8083439eea5cbb6d193c13bd62f5658ed4304774c6b1faf5b3dce432487840cabab415fb5d67640a739ca6e5414e760869708a9d7331e7e7ad7d55e035c7
MD = a6a1b8a26f6f440f19f16dce1d3001477d73ee7f6c374bce2922167b81970d6a
Len = 960
Msg = 4d11aa5d3c6b6900f49ff90dd815744572be5648b64bde638b9db7a9877dd745fa8ea80e2f7f655cee85c71a4509e21d899e49b4973579815f947587a404ad83fd4a248020d9d2a65f46485373fc926d793161f63a196ae0af590923c5be2a0e5d2f69da97e0788550c9c1dee9574ddc4a61e533275d7729
MD = fc5159f0ddd6d765c85fcc3fc3ac1dc0d317d8ea0b110e96ac9f7a398dc386c5
Len = 968
Msg = 05cd99bfe031d123ca7061d3de0956f4bbf164bad792db881713d6599ddab55ee24fcee804e360896152c8766424f8309f7a24641a07be0feb5da5e5076a9af45842f385101f93433ca5199f9c6b5872b2b808e4198aba8e18dd12db772930b4912d6f5cabeb529884f4bb142de55e021b3276047b22b64cc5
MD = 8aa07742e6f1f47ad020ed6684edc8dba4af36b782955f0f972be3ae980aea0e
Len = 976
Msg = 529684398d68bdc19e7a00ce32cc1a8c1315b97f07137474f61f0cb84a04f2879b1109c78c6dacf7f0abf362329e3298f36fc31ef4ec06653723a5f961301dfb63537ad15946611cb2cd54ea928e322e7423fd6d146ee0b98c2c71e3bdcd33edf0845fbebd9ae4192d07acd01b432135e05af0d22f3f0c5a3d62
MD = a07049b6ebd7b355479a3d802fda436b83ae6747d741cf9626f7c62f47cbd563
Len = 984
Msg = 982fb5f4af498a4a75e33a033235ea3ddb70d9d236519f883ff5b388cbef30126b98d96e93a65a26fb00d17246d18cf4e2db14a52f0f6b10e35a93beadc14ff118b02e95b38fc4736f973ba848e40b5527cb0599076d96bc578c4aada09e8faf6820bc4f562d5199974f808b7f95edca74e6b3940894a7f66534e0
MD = 09c60fec5a089a23f5da3ed2492aa21fcf7aa36183850fafc15ae8c63f596db0
Len = 992
Msg = ca88614828f8acdb5fcffab6bb2fb62d932b7808e4d9cc3139a835b0cef471d9f4d8ffc4b744dffebf4f997e74ce80db662538bceb5d768f0a77077e9700149ea0e6a46a088a62717216a14b60119dd19c31038ed870b4709161c6c339c5cc60945a582263f3be9a40cd1a04c921947900f6e266f2390f3c970f7b69
MD = fe2d4183ccdaa816b4446a9b6c07d0ba4b42ac743599db5dc482b1941f443c71
Len = 1000
Msg = ab6b92daf83275cb9c1b76cfb59fbcc8ac53188e0b6980918e7ac0c07c836ca9372d19e11251cca664bbb3c3db2e13b412a9820b65e95612042f5db24643cf9340b9808597735a1f92670ba573a2fb2f088d81087d70565574344af7576d35b2ed98318e2ca0067d4fa8e63f28045b83b6887d4ffa0668a10712ed5759
MD = 744538e1ae1cd7357710b56c3bc6f1bd7a8564118a1e0f9acc30fcf0b5396eef
Len = 1008
Msg = bfd4c7c8e90858ccf9c8834abefd9c1846ca4a11966fdd139d6de24a6bebf4b19f58d5d51e52bddd0bc6f1c7f35998f44707cae7100aeb4adefe373101429da3fca1d15737329dbbf47c783a84de59bfbb2fcd75a1a148d26aebb8d3a9a76089c0f8e4d49b71a06f9e323e2cdb54888189887a44b1fa9cb32b7c8fb7c9e0
MD = 58b17843bc851a721c5a258eef57b3854d02190e732d9b8e7a9f926ac409c173
Len = 1016
Msg = c5019433c285da2bb93f119e58b4f36cd1e4d99dda35dbf4f8ae39c7fe65fa0ed03bd2b96dc649472d8f1a94477ed9f29592d97c9cd54da7c790ad1af3bb5cc030b7871bc64050db779d2caf0419895bf3b7b50b8e22fbe62fe30fe7bbd6ace86ddf7b00d5d9370f20cf0f97996f4bce70bb33f1ba022cdaba0f25d55fa031
MD = f7c92a3fb7f180370d628be78de874d693f74ccc7a54c741634258d8c512fd7f
Len = 1024
Msg = 84b60cb3720bf29748483cf7abd0d1f1d9380459dfa968460c86e5d1a54f0b19dac6a78bf9509460e29dd466bb8bdf04e5483b782eb74d6448166f897add43d295e946942ad9a814fab95b4aaede6ae4c8108c8edaeff971f58f7cf96566c9dc9b6812586b70d5bc78e2f829ec8e179a6cd81d224b161175fd3a33aacfb1483f
MD = 8814630a39dcb99792cc4e08cae5dd078973d15cd19f17bacf04deda9e62c45f
Len = 1032
Msg = 14365d3301150d7c5ba6bb8c1fc26e9dab218fc5d01c9ed528b72482aadee9c27bef667907797d55514468f68791f053daa2df598d7db7d54beea493bdcbb0c75c7b36ad84b9996dca96354190bd96d9d7fbe8ff54ffaf77c55eb92985da50825ee3b4179f5ec88b6fa60bb361d0caf9493494fe4d28ef843f0f498a2a9331b82a
MD = 9b690531dee948a9c559a2e0efab2ec824151a9175f2730a030b748d07cbaa7f
Len = 1040
Msg = 4a757db93f6d4c6529211d70d5f8491799c0f73ae7f24bbd2138db2eaf2c63a85063b9f7adaa03fc348f275323248334e3ffdf9798859f9cf6693d29566ff7d50976c505ecb58e543c459b39acdf4ce4b5e80a682eaa7c1f1ce5fe4acb864ff91eb6892b23165735ea49626898b40ceeb78161f5d0ea4a103cb404d937f9d1dc362b
MD = 1ac7cc7e2e8ea14fb1b90096f41265100712c5dd41519d78b2786cfb6355af72
Len = 1048
Msg = da11c39c77250f6264dda4b096341ff9c4cc2c900633b20ea1664bf32193f790a923112488f882450cf334819bbaca46ffb88eff0265aa803bc79ca42739e4347c6bff0bb9aa99780261ffe42be0d3b5135d03723338fb2776841a0b4bc26360f9ef769b34c2bec5ed2feb216e2fa30fa5c37430c0360ecbfba3af6fb6b8dedacbb95c
MD = c163cd43de224ac5c262ae39db746cfcad66074ebaec4a6da23d86b310520f21
Len = 1056
Msg = 3341ca020d4835838b0d6c8f93aaaebb7af60730d208c85283f6369f1ee27fd96d38f2674f316ef9c29c1b6b42dd59ec5236f65f5845a401adceaa4cf5bbd91cac61c21102052634e99faedd6cdddcd4426b42b6a372f29a5a5f35f51ce580bb1845a3c7cfcd447d269e8caeb9b320bb731f53fe5c969a65b12f40603a685afed86bfe53
MD = 6c3e93f2b49f493344cc3eb1e9454f79363032beee2f7ea65b3d994b5cae438f
Len = 1064
Msg = 989fc49594afc73405bacee4dbbe7135804f800368de39e2ea3bbec04e59c6c52752927ee3aa233ba0d8aab5410240f4c109d770c8c570777c928fce9a0bec9bc5156c821e204f0f14a9ab547e0319d3e758ae9e28eb2dbc3d9f7acf51bd52f41bf23aeb6d97b5780a35ba08b94965989744edd3b1d6d67ad26c68099af85f98d0f0e4fff9
MD = b10adeb6a9395a48788931d45a7b4e4f69300a76d8b716c40c614c3113a0f051
Len = 1072
Msg = e5022f4c7dfe2dbd207105e2f27aaedd5a765c27c0bc60de958b49609440501848ccf398cf66dfe8dd7d131e04f1432f32827a057b8904d218e68ba3b0398038d755bd13d5f168cfa8a11ab34c0540873940c2a62eace3552dcd6953c683fdb29983d4e417078f1988c560c9521e6f8c78997c32618fc510db282a985f868f2d973f82351d11
MD = 3293a4b9aeb8a65e1014d3847500ffc8241594e9c4564cbd7ce978bfa50767fe
Len = 1080
Msg = b1f6076509938432145bb15dbe1a7b2e007934be5f753908b50fd24333455970a7429f2ffbd28bd6fe1804c4688311f318fe3fcd9f6744410243e115bcb00d7e039a4fee4c326c2d119c42abd2e8f4155a44472643704cc0bc72403b8a8ab0fd4d68e04a059d6e5ed45033b906326abb4eb4147052779bad6a03b55ca5bd8b140e131bed2dfada
MD = f82d9602b231d332d902cb6436b15aef89acc591cb8626233ced20c0a6e80d7a
Len = 1088
Msg = 56ea14d7fcb0db748ff649aaa5d0afdc2357528a9aad6076d73b2805b53d89e73681abfad26bee6c0f3d20215295f354f538ae80990d2281be6de0f6919aa9eb048c26b524f4d91ca87b54c0c54aa9b54ad02171e8bf31e8d158a9f586e92ffce994ecce9a5185cc80364d50a6f7b94849a914242fcb73f33a86ecc83c3403630d20650ddb8cd9c4
MD = 4beae3515ba35ec8cbd1d94567e22b0d7809c466abfbafe9610349597ba15b45

+ 408
- 0
strobe/python/kat/SHA3_384LongMsg.rsp
File diff suppressed because it is too large
View File


+ 310
- 0
strobe/python/kat/SHA3_384Monte.rsp View File

@@ -0,0 +1,310 @@
# CAVS 19.0
# "SHA3-384 Monte" information for "SHA3AllBytes1-28-16"
# SHA3-384 tests are configured for BYTE oriented implementations
# Length values represented in bits
# Generated on Thu Jan 28 13:32:46 2016
[L = 384]
Seed = 7a00791f6f65c21f1c97c58fa3c0520cfc85cd7e3d398cf01950819fa717195065a363e77d07753647cb0c130e9972ad
COUNT = 0
MD = b2d4e10214bd7991e3a3e4772f5c7b390178e20c3ff882648a891e44b9d309d91bf5fab74c0bc155a7fac972a9b128a2
COUNT = 1
MD = 608db3176176effb7b7cceb8962bffc67584cc9e9860752f6644c7810cc83f4fdefa108bcf308d4137265fbb1ecf10fb
COUNT = 2
MD = c6c0d9c39fbd7cab9b96085f65420d53c0e1ca4f8b79edda3177a20d7a605ee4bc4f1e2589979867507736c39280901f
COUNT = 3
MD = 223cb4fb8c18b420df2ce25ed1b60c0d60d324234a0c311717058d0285ed14e02077d56a861e0e2a6474d39ed0bd8147
COUNT = 4
MD = a9ed13848adb2015465a26503d8c3b922400fc2e4dadb579da5115f96eff65151866bca58899297fee787de9305865a2
COUNT = 5
MD = 250160585ebbad4ada427e52b462af268ba791b03ea5e2ead06e51e1763eaade36addcdd7f2d2ca905584afee580787f
COUNT = 6
MD = 9ca20cfb96101503380d7356630af3f8c6c183c5c7c73f861144e8f000194560a0ca4913e61262599b88d0ddebfaf297
COUNT = 7
MD = a641d3958798f05269c10999c496ea6324e178c1cea3df8fcf6fb7b8570b30d08b3a724617036e3d7e493c185bd8dd59
COUNT = 8
MD = 361d41e02a7d9c4a2743e0e0ddfede8b917f216a375b44993c4da662f503d7fe5e3ea940102aff4676dbfbbab83ba0d9
COUNT = 9
MD = f2072c4e0efe91519abf3efaf73d9f7dfed66b55c82cf49e46f12695885e3107b0b91321b0ad984104f8530c0f11bb12
COUNT = 10
MD = dc204edcd9b381cf7362c5292a2dcbdc8234b46cfa0c38ea010a0eb4a1b135d6ae9f68724efb9f160b0bb3c4e5656e35
COUNT = 11
MD = 1c04cb6989b8070156bdaf607e2e53537df571558cfdb021ef8eb241186cb31be44b42279f42ecc1f8740f5678ff9bc5
COUNT = 12
MD = 328fffcd1f4a9ad876a1b9ae71289e8dc4305138c343ea94cec62225fa4c20bb8f831da333517bfcbe3fe742920abc69
COUNT = 13
MD = 85dbf0106bf464b2996f70a44d153f835d4a1ed775f71609bbbe51fe40a8f97785bdd65256d54faed5e05282e365a5cf
COUNT = 14
MD = fb9eee3197db0d6f0e771827c0f9846b7b989e6c035f3e89abaa2e2dcdd3e8a2651b3e2518fb5d287e2bc0449c8f5c3f
COUNT = 15
MD = 249a8b718ed3818a0873f92df3a20b2ac3e0f796c9b6f7204933e01167a9c3f82b82cc2fb2d8073ad864474b6dcbe611
COUNT = 16
MD = 9fe3eeb06de2263bbbf08f0e20e9b9ff8ac0f6ba96316235d6aba199e30d60d8bd8a878f674c7d0ad7cb05b2a5cda927
COUNT = 17
MD = d6298b466c189403382a8eb98dd9a54d0d39d59ae8f5e5d620ef418c55031de5124cb9bf6fa931570292dfb618c4dff4
COUNT = 18
MD = 6a423009ae0859052030f636fca51159a2d3414a6e025c12c811b3f2d8f880af2741c4e059f571339c8016de8b073608
COUNT = 19
MD = 4f31053aa710a9376fa2a410e3458c1b4d9005c66ae01f41c093996f9a8b5c6885467acd9ad4b4bbbe1fa32d24ace547
COUNT = 20
MD = 77a296b5cb27d6d33365d65c6d49e6e27b50888adf2bd8581eac8266a7a182ca05498c65276e5eecbf297ab61c834881
COUNT = 21
MD = ed319f492a16cca4d5ba30381e1ec08c0b66f34bf306b21a651e4693e171598ac9cefaa1f2c3891d5c688bedbeb3dfd1
COUNT = 22
MD = 400577d24b8eeae14eacd5df544b2567bcbca4884678925acb3722ad56cea947989665de03fd86f9550af0b272c36c95
COUNT = 23
MD = 774ec2c381923a8898e798942b6ab7b9689f316aa83b8cf36af9192c7750b239ac72c8466e6c43997c7d0b124fbb86a4
COUNT = 24
MD = b64d7cd2cca30cad4f9a6f7ca3b39d913479a4fabf3b02eb1c0636f91bbece91a9855e3999fa9358836c88d253191494
COUNT = 25
MD = 58e0a41eff4b33bbcb1f8be2406345532be643dc7e0dc1319b576f7d9eeb645fbe1aba0ab8f42ef49ae11e37dceca507
COUNT = 26
MD = e891ad66e4da1ffa63793cff8b36f5c28ca19c51bfe77709fe678c415f4a5895fa7c778ebf915258adff2777adffa2cf
COUNT = 27
MD = 4ce67891990de0607bba2b3f7f8c09f036523308bc54d4bb404af382667a933ce2d86bec0b315be538e2d6003e4ebf6a
COUNT = 28
MD = 4793cb36391bfb59a5d65cc1eefa421903631a558a544f6276d9d6bad0e826aad41ab892b133267ee2215a6e3520583d
COUNT = 29
MD = 963eb0c68937a5b282cb86125b9515cc78c4182a04daba0df72a5095d906b149024318b06c6639fafdccc8c4ca1c8b9d
COUNT = 30
MD = 36a9cd9b49a33b3115da7b0b862988a0275b2cf3241b4d4a135dfbc8c1983454ac122822e7556818edc5ae4267d0f13d
COUNT = 31
MD = f658aca80477b04e85ac6470c685acee6e8ad6563a6d4a903865b07a99648a2e9749d82bb187a8ce01636244ad30a3d2
COUNT = 32
MD = aefc4b9fd0d99fd6eef4a0f5099cebd9f409a7fce251bb675016d830e7787e812ae90452a33d9ba8d41f9ec40716ddc1
COUNT = 33
MD = b31d8342fe8c5adaecca08fee1d97adcf74131cb67505c155957f740dd2ee3ec7099bc271143e9785f2d7e99f15d1013
COUNT = 34
MD = ee8ffcf5e1455283c1cedabb355489a49de5207a138e29ab9b0b8af5eab6938d1dee47f6315a5e2697b58a39499a2574
COUNT = 35
MD = 05db22799cba19e8a88cc8b07c96725a71f518081cc7c71970f9a132f95f2e2dbbe020a5a227c1eb6927fe53dfd5ec63
COUNT = 36
MD = 6ca724f20838d1a485d698d07d967bda095dd79f56372986eff7fc7a23e9f99e7c3b44a46604979806687c9c1a4c8fd2
COUNT = 37
MD = 05340677c8620a2fd171caf84f344cd83f837ed5d544d1d3c9d116615e9b5624081709e8db92d3fb0a8f771b521f11b9
COUNT = 38
MD = a0e2be50601a3fbc16b49305f5e695e978b971b2c068596fa9bd13f7e7ed3e8c1205313f8a23839625336dbc5d2d6f83
COUNT = 39
MD = 6a997c32ae605df471e7922e7870ec4712beb7d5bf47104462a00e2a1832166ebdecef3455c1af0bc132ca4ca7624db0
COUNT = 40
MD = 67641cc95f9eac54b088c15658c84a6af7303b489c3566f0937b93666fe13a0f520cb7b56265315c928dc1b8361a8af8
COUNT = 41
MD = b0889a08457fcd166a84303029d55eaf531a308de12fbcc6f876ed6d6d377408e9cd3deaee59a41c22ac06813dcc88bc
COUNT = 42
MD = b3c444ce312b350d0187ced7ea7b8351d454e4d34ecab213fed966aa630a817f7c70717fa0714750802bf38978e52b75
COUNT = 43
MD = 20d6902f2df906d2c7b9c404cde23a62307790250724e7fd8ac9abb93a44e715f7afe2ff8ed889a9f355dfdd95934ff5
COUNT = 44
MD = f8bd9e71525d0d94def6a774894f0417ac961062b77420570cd6499fed9c20decec64ed95b1f79825efad5afc92d5f9b
COUNT = 45
MD = 19dfb0afff19f2cc3faf3874727f6dfc5f16133f5a5a29e54549eeb8450c8e86f64f35b614f645fb0e9ee36cfe0741b6
COUNT = 46
MD = 58f3fd66aa8e6704ba659560272c3af9725af8c60137acd86b2b8b8c334aa9a04065ca7aeac84d6bffda6fe420018d26
COUNT = 47
MD = fd7f8e39744b8fae34d626843046690db47d7225e3ec22ae41963aaffeca634dc607c48c80d69b084749ae6004d50532
COUNT = 48
MD = c31b336be783063bb594fd2aac1794a457246b53084e57e24e254dc46eccaca666ac5ed49cd2a0e8284d89106b023c26
COUNT = 49
MD = fadf05bf17572ca80e771afc8599c903a483e86c53080999d022e1feeb0a102ed60fd98e51d6286c2114b4876316a4cf
COUNT = 50
MD = 67e8e0996eafeb0457ca23f8996245bbb4e4a9f69a0bbe150e3b072f1aa3e6feda0bf8d63d126adcc1ac7fbcf26027a3
COUNT = 51
MD = c0f02377d0eef098c89768493203c6ad5384b6968a7bef8edde2ee19a5e50ec9a9c8c583d7adaacb9e5be384d84717de
COUNT = 52
MD = bcce2df94092d8b10561a17499d232bfd40a591b9a9284306c12dce48a2040c15ab48f957a93554d3f71569336065ea7
COUNT = 53
MD = 23440d45311673e2a16cc9ff56f7fd63984825b60050ac02819359d4e6cd3ac7c97026dcaaf187136bdc870e997b95e9
COUNT = 54
MD = fb8245292587c40de63b12d41a0d4d88ae52327fffcef876ae2447cbb502e25debe8e7e4f6165cdfa42e17b7a3432e4b
COUNT = 55
MD = b4d125497c90fce16368116bdfa11060a4e6e4c41112e6dbb521a2081c463bda8d1246bf4ad5c7ba47a930dcfbd8c925
COUNT = 56
MD = 8c26a31291004c8fada17d135ff35bd58878e8b6b5fb77bc305a81512704ddd92e26dc9560ffc62fba4b31754ad75fa5
COUNT = 57
MD = 2855078eec4ed7ef8d258b7689687b9d4d6963275b5c4a1ab8682d4e9c4e978645207717917ca16ef9e785e2b61ba166
COUNT = 58
MD = fd36c351aa1e105eec035f1971c0602f34601b63710ddf7557787d84ed4022e75a787027cfb40effef0f12a0f2ead56d
COUNT = 59
MD = bab50ad626ec56d8dbe9a9318a2fcb2359d0accd9499bd76a8db33922503f40f3b0e9a43af68d537bfac341b343d21d8
COUNT = 60
MD = 937d6cada88fbf1490322c52f9e2a463f3d0d17954d19d07e0b0d4b8d172f0d56a852030b80985328cdd038fb3eb04d6
COUNT = 61
MD = 2ac82984b61b7fbb810f13b7d6d1cba2ab22f381e988d016432a60daaa205e5ee841cce614869164e0ca3e9b5ab7695b
COUNT = 62
MD = b1b08cc5d7cd4fd3698e764c938f0d24b24b8f9966f734f9c86df1067a6e3addbe7050181eb52e51565fc5a0fd39d492
COUNT = 63
MD = bfdb13378e6a975eb947d419224b813264bac407ee754ea468aade2e9ff267c5742b4a72fd7a757d392a310f74d21c1e
COUNT = 64
MD = bb8d3f70cfd2a243512275860e93b3191fa38caa92ec3309dc50c1ee26819e622119260ed529bd11c5a03cf7151b72b0
COUNT = 65
MD = b5b6bcbadf784e212212a296d600218bd1f6f576a70587337faac9332b637cb38c6bbafe788d023146501ebfff72ffe9
COUNT = 66
MD = d50ff2a926a49d4183070c70c0a95a8ff56ea45928eeac3542492c66b3093fb6ed03d355dc4117ec351a6446579c606f
COUNT = 67
MD = a2dcbf96b45206fab7769a26977c71735d8f4543aeb81587b2238636bf84517f81b89394c4c1e7ae935869fd7aa3035f
COUNT = 68
MD = 8c250da3ce14a9e08c38a5e8c8a31c45b99ae7f1f61c90d589956ea27c7942d33f5eb737796f7ca35b6fccaec13da764
COUNT = 69
MD = f1746cf5c0b7d045979f1e185a35db13ae22a77ea437cc8f7aa6514e8b6e6a82c615bc96bfb6def8c43d31c6dda35d0b
COUNT = 70
MD = 812ffe86f90be9a977de260c6fcfc0682092f8cc1404c25e52972a3a2d953c021a531c6db7502bef75743fb65a79052e
COUNT = 71
MD = d3d6f385abc45f1ac8a72f049204701cb37a28c9ee593596b5f38189ffdbac4bab6dbf28c374a0216b7d56875bb9ec12
COUNT = 72
MD = e1fd5e62f418aaf6f245838e419bdf092b7ec3ad02efddf9145063791e352ed3b1c21ff7cb68223e1cb288299ae09e77
COUNT = 73
MD = bec64b051c19b035adb906ffe37112855a787082334286b631fae0b5183341097b37192c96d1ddf566f6909cd0b8b264
COUNT = 74
MD = e82761ac7a5da23236265fd7f8cad06744870c2b5362a8adeed3428ea324066448c98482e1c5b15f0199ee92d4aa0e69
COUNT = 75
MD = df495bcc82cc006dce81997c2799c27e3908032cb059cefbcc687e0cbf561cc05c6a0cd91ac9ecb074392aff7e5e3bb5
COUNT = 76
MD = 404a4cb927ed4bb7d97934dc232d9866dcf1a7036bbf3e4afea357752fe69cbacbf0240c5b7b23a83520daaf22fa2f63
COUNT = 77
MD = 52eb7c7ed4ef722016783f16f5d89a77b0250438953d5372bfba2a1108b698c391e361c4866c188de3112972c69eef80
COUNT = 78
MD = 4cb8e58fe96b142bf063c443cd4462d47397428abec69fc3bc94591b35abfa8a0baec90526b27f3ab1e97a5c19c22b60
COUNT = 79
MD = 93c22a7d0bd3b7d806ee50abedd0f26a80654f0b7187ed48965ab0845b113b9b9093d1969762f268ddec1a7d3c30b11d
COUNT = 80
MD = e4df31ddb119ae861c3f2d4d7e2473664fb79532de6ecaf635f235da1629406d7110c776de2838360a4b3fb0fb54e1d8
COUNT = 81
MD = 3741ecfca60572118076e19a9d71a6c092a31c5a523c7458397c934d2eeac17daf03c0ac16b3852955ed9bd0067865db
COUNT = 82
MD = 88c6709e3efc7bb8f5e4ae15a83ee8d0c0ec14676d81fe263fb28dd293b65eaf5963ef6ff226628650200f939a8a7deb
COUNT = 83
MD = bf514a6252783e67e0a6e9d31d7bdeca857b83b09bcecf020f17471b397991effb31d350a0679f8d080cd63a43bed7b1
COUNT = 84
MD = 70ceeedbd57969e63dcc035af4737ec406b007bb8f1e3d26e63ac8664a809f0803e39bc3581fd229ba6262b0794c3b2d
COUNT = 85
MD = 80d09f64b95a411e7282ca8f70d6ae21cbff6ce3a0b84b65c4c137d7bc13b8d1d773dbeea7e5d4bb11565c4fafa0faee
COUNT = 86
MD = a17f543a1d5a61585409abd20a3c8fbf0dd756a703b6f0c39fad04bc266b7cb69462196425f5d259ee31f53f3d6fda3a
COUNT = 87
MD = be19ea7c1d0c009a81dca1e9a7c6762f9a8191eb82fd72efb28b42b901be4e2385a5d1572d2c7c0995851ff87a649b78
COUNT = 88
MD = 21ed3cdc4c043d8312b30cb972d2766cb0bc6792aa1661b207e505ad8ac5a0a7cd03375862ec8cdc769de60ccec0864f
COUNT = 89
MD = 3ba7ef694fbc93667f92bfd36898f65f93addb39328c7ba099f6da2bddd8d9d44d8baee0edf8f151d80f365df0943c60
COUNT = 90
MD = 00d66ff05a5b45a3f4125b0e8363899c96f6788aef4c3c0f1335a8b50785d28cca4ec4c892e3ca23bd392c936171aa44
COUNT = 91
MD = 5c975bcdc34f090299362adb1264dd2a028d6ed74576ef47a3c320bf71cd5ef6a230f4d2ade779c927891238f7eae32c
COUNT = 92
MD = 27392d2b874e926ee64374f831a41c89027a87778a88ac81dc6cded5a195935c27a495d5e7411b4472742696c8ce786e
COUNT = 93
MD = e1d4b3b786d55611ed685873c6fd80a4fe4a3fa1e958f656c73f1e750967f5c059122a13a8bd50d36713b463149b7685
COUNT = 94
MD = ac779f59d238eee1a1046a7487826b7e53f7171bf985a8a61526caeb0af13610227ff25ea340a9b7e53c646508dd546a
COUNT = 95
MD = bae8ec05d6de979f7c614e2d496b3186e27c6c856fcbe9c853b8ceb1476cedb2734f5bfb46e26ee8a0cfa763f5927710
COUNT = 96
MD = 9f3e7209fd277887c19e6b35b03f00ac6c65efc17b38163c5e001b7b2ef6325d89cf6553f8dd5cb3fedb4f6815500053
COUNT = 97
MD = eed180d3d0b1c308a9465fb9f101bd826b17484b9f59e7dc22a2b0ff5d10c0e689169eccd85038ffa043789f65024a8a
COUNT = 98
MD = 96cdb425388488374307551dce0ce0e624005499ac861202961f3b00edaf42e45c8905101a62f2d9a5d32a01fd778f02
COUNT = 99
MD = 02c9babd4add11a5f23c1808f72e3dc8325cedc31d28213a04d999dac8f46b866f84ba3dbfbcf1a863cc54d808ffadca

+ 427
- 0
strobe/python/kat/SHA3_384ShortMsg.rsp View File

@@ -0,0 +1,427 @@
# CAVS 19.0
# "SHA3-384 ShortMsg" information for "SHA3AllBytes1-28-16"
# Length values represented in bits
# Generated on Thu Jan 28 13:32:46 2016
[L = 384]
Len = 0
Msg = 00
MD = 0c63a75b845e4f7d01107d852e4c2485c51a50aaaa94fc61995e71bbee983a2ac3713831264adb47fb6bd1e058d5f004
Len = 8
Msg = 80
MD = 7541384852e10ff10d5fb6a7213a4a6c15ccc86d8bc1068ac04f69277142944f4ee50d91fdc56553db06b2f5039c8ab7
Len = 16
Msg = fb52
MD = d73a9d0e7f1802352ea54f3e062d3910577bf87edda48101de92a3de957e698b836085f5f10cab1de19fd0c906e48385
Len = 24
Msg = 6ab7d6
MD = ea12d6d32d69ad2154a57e0e1be481a45add739ee7dd6e2a27e544b6c8b5ad122654bbf95134d567987156295d5e57db
Len = 32
Msg = 11587dcb
MD = cb6e6ce4a266d438ddd52867f2e183021be50223c7d57f8fdcaa18093a9d0126607df026c025bff40bc314af43fd8a08
Len = 40
Msg = 4d7fc6cae6
MD = e570d463a010c71b78acd7f9790c78ce946e00cc54dae82bfc3833a10f0d8d35b03cbb4aa2f9ba4b27498807a397cd47
Len = 48
Msg = 5a6659e9f0e7
MD = 21b1f3f63b907f968821185a7fe30b16d47e1d6ee5b9c80be68947854de7a8ef4a03a6b2e4ec96abdd4fa29ab9796f28
Len = 56
Msg = 17510eca2fe11b
MD = 35fba6958b6c68eae8f2b5f5bdf5ebcc565252bc70f983548c2dfd5406f111a0a95b1bb9a639988c8d65da912d2c3ea2
Len = 64
Msg = c44a2c58c84c393a
MD = 60ad40f964d0edcf19281e415f7389968275ff613199a069c916a0ff7ef65503b740683162a622b913d43a46559e913c
Len = 72
Msg = a36e5a59043b6333d7
MD = bd045661663436d07720ff3c8b6f922066dfe244456a56ca46dfb3f7e271116d932107c7b04cc7c60173e08d0c2e107c
Len = 80
Msg = c0920f2bd1e2d302259b
MD = 3d1584220409f88d38409a29ecaebb490ef884b5acba2c7eaf23914bab7f5f0fc97ee1e6336f88dfd4d0a06e902ccd25
Len = 88
Msg = 70ae731af5e0d92d264ec9
MD = 563359fd93fe09f3fe49fcf5f17e7f92aab589cdec3e55e4c3715e7775814bbbfb8c4c732e28d3b6e6404860812dc6e9
Len = 96
Msg = 69c74a9b0db538eeff64d93d
MD = 88c66389ca2c320a39022aa441fa884fbc6ed2d3cc9ac475372d947d4960579a64e061a297d1831d3524f98d8094404b
Len = 104
Msg = a4a9327be21b9277e08c40abc7
MD = 751f5da5ff9e2460c99348070d5068d8a3d7ffcec7fd0e6f68f6cd4a2ef4226df8d9b4613c3b0d10a168eaf54eabe01a
Len = 112
Msg = cc4764d3e295097298f2af8882f6
MD = 10f287f256643ad0dfb5955dd34587882e445cd5ae8da337e7c170fc0c1e48a03fb7a54ec71335113dbdccccc944da41
Len = 120
Msg = 5a23ad0ce89e0fb1df4a95bb2488f0
MD = 23840671e7570a248cf3579c7c8810b5fcc35b975a3a43b506cc67faefa6dbe1c945abc09a903e199f759dcbc7f2c4d0
Len = 128
Msg = 65b27f6c5578a4d5d9f6519c554c3097
MD = dd734f4987fe1a71455cf9fb1ee8986882c82448827a7880fc90d2043c33b5cbc0ed58b8529e4c6bc3a7288829e0a40d
Len = 136
Msg = a74847930a03abeea473e1f3dc30b88815
MD = dba6f929fe55f9d66c5f67c0af3b82f17bcf58b36752f3165c16083fea8fd478ee6903f27f820ad2dd9950afb48c6700
Len = 144
Msg = 6efaf78ed4d293927eef2c3a71930e6e887a
MD = 8218498ab01b63041c2ba0709e3309496124ddf0904543a9e0d9d096a750dda97f7a02208af3d8c618d4be7c2bb2a288
Len = 152
Msg = fd039eb6e4657388b947ec01e737efbbad47da
MD = c5b3130ef8dbc580e1103fecae69c9a882d9ebf5a3def5938b07f843452a09c9f72f0dbca91d33b021cf6aa6fe60d2ed
Len = 160
Msg = 9c694943389bdc4e05ad7c2f63ceac2820e1d2d7
MD = f692c025c5c5f3d1275213c1df9bf9eb6d2188eda90ab5bffe631f1dbf70ebd628caee88b7d149e1ac4e262873979afe
Len = 168
Msg = 0fb18357b018b9bbb2cbb4cac50bc85609c92b8e7f
MD = d164306c99e3798790f0923fe92dbf2f96c3907127dacaa467c766ac75788062589272cb7690b8af2030dd8bd61a3df2
Len = 176
Msg = 26cb40a460e2e727aeb867e0140d0f34790110deb5d7
MD = af2a42a4c67c3226c55b89605b0dee27e796c2792115f6097203db5aed89e35f563a8246d399fde00c2a5b97ed5a5e17
Len = 184
Msg = 6690a3a0373c829facc56f824382f4feed6eb184642b4f
MD = 84e1b68bc9e2daefc19b567dec911ef46f5f37a74fdbbb6155e7e646f2735df2ac44e239689eb5b536465dc571e55cb2
Len = 192
Msg = 7d80b160c4b536a3beb79980599344047c5f82a1dfc3eed4
MD = 041cc5861ba334563c61d4ef9710d4896c311c92edbe0d7cd53e803bf2f4eb6057235570770ce87c5520d7ec14198722
Len = 200
Msg = 02128283ffc0cfe254ac8f542be3f05fbe4e855dd22ae98a81
MD = 3840981a766d725f83d334e8982965033a5fbb5107d94ffef33b1f700cd46348091a49f6620c37ae3ef5b20513494826
Len = 208
Msg = 27911dd0a6843ccae965d876aa1916f1dcd71e518f7f2197152e
MD = f59f8428555984d1526cded8129c649fb1b683d35cec7c5e1209441a6a9e7c17f0784151b5ab8a8c492b402a3acb98c4
Len = 216
Msg = d9378bb66e8c8dee556d691cbc9fdddd6333ca5d50668862c3c57d
MD = 994532d1a557e990b1cc9e0395a2ad8b05619ca322db9da3c4ed2ee194c051d04582fde72dd2b8f674cf6ec958db75da
Len = 224
Msg = ae1828047c5f82a7b9712f3399832124b892f2f7aea51c8fe3536cd6
MD = d51111f8bffb44d81ad19683198f29d2033144d3cd856c749cac5b9cae0e712f500f8d0ef813f38e305ce175a7d6162c
Len = 232
Msg = 7dd2d76fa054cf461e132e9ef914acdc53080a508cdc5368ab8c6224ff
MD = 6c0b3395e4c86518ab0a06267320ee9ec95e50385b7a2527ddaa1bd0ead262c56122d4f4eb08b0ae22b3ee7e6f44dd18
Len = 240
Msg = 6fd72888a021f36e550967cb5605b55b78657c9272d93c3ded340d67da6f
MD = 0551583a5b4007401c77ef4382fd8e245c9cf12e976c9766af6b7ae3c7e07a82b3079f903b083d5ec85cb94e46a85ac0
Len = 248
Msg = d500eb9546553619cdc31e0848c502db92d547efef3ae5eeaa22258afcf0a9
MD = 5edde2f94f8695f277ec05efcc00761fafd272200aed0e63d221c2b6c65b4972a6526f9a1f2e6ace0e81938f043fe877
Len = 256
Msg = 6189597e0198a18c65fa0bdd0797f13037c75c4058b7d3454c0f71bd2dd13b6c
MD = 110630ca7631b7620e6bee6ed6e929098965571936c34829484983eba9532b8175528c228c57439453f027a4f7c83ca3
Len = 264
Msg = 243b941d748541af303f8e9d2c371cd03e437d62a9df485ddc176dc65da8c7da00
MD = 5884201f7a555ea3c5deeb019fd9e8c161e1b89756045e475b141ec5135ce5a41c93e5e1f79534d36fd8345ba434da43
Len = 272
Msg = 2dc3d789582c1a806c3b491d5972ef8f1733f1f5e02866dc9de2a8029ec0ab608d13
MD = 05a3903b519cdf679120c7ccb4ef178b58e4502fcd461360988fa06669294851e629d9dd3e77ffb73d24599d5d3edd36
Len = 280
Msg = e5b3f6962fe57230780b3d55b29effe0dfebde2c81ba97d4512ecdbd33eca1576a7f82
MD = 7ac2776afb74f55bbc4f6eccf825ee13ac7445fb54974e6c24ebc0f03fdcd8530199a61106a31b4279e02201ee0f54fd
Len = 288
Msg = da03486aa3cebbd6502e9f5a6f0f835e973a581befcc1aadefe7b3696ba71c70cd58c584
MD = 02c44ceec0bb7dc0f664ebe44230192b5b0bb646bb944d23fa1ff3586dc0523fa9d7f0dd6df5449ab9edd9a1096b07dc
Len = 296
Msg = 3c686d321ba66185cdca83ba9f41984fa61b826ef56b136e13f1239dadf6e03d877866ccb8
MD = ad624edd9f2c3a32b56c53d9e813c01d66bcfe424c4a96907d52ac1ddd68370ec86dac67504a90e8a8e75502e01081d2
Len = 304
Msg = 4dcff99fac33840f6532547fb69b456902d6718fd5d4538e23462db6d00da61975f2b8e26298
MD = cf37dd27997c1bb7e6dc405170066e74c6ce517c029ed8dce126d025da74e0b8e86da567e8d7d8d5b5d3e2a546df7489
Len = 312
Msg = 2799f672328834d7eaef9439795d35ce93c9094f58ded9f17c968a97a50a9e461489fed988e7f6
MD = 85cfc23c97cb13910b808e7033809a45aa0b7f7138de618c2ca622c8b813c988e264af3b96c7925dcbd1d2761757d800
Len = 320
Msg = c7e947507822f28a562745a8fe6fed6cb47d73145804c894954e21245cde04fa9155a35904926aca
MD = 8bddf3baebbc5b04fe0b0a9c3c2b730abe918ce4892d2843c613ee96da0228512f0d1307c7d1a8922e79a92e957dd18e
Len = 328
Msg = 6c497bf6ff69cb39e3faa349212b8b6691ca237905ac0099c450b6d33abf362bedb65bdeb307bfea23
MD = 3639fab6191b35246278522cfacee0cd5b15580a26c505ae3c46b4b1c2572016b48f1b012bbbedec47916950fbb33a1d
Len = 336
Msg = d15936f3b0c9018271812b4c81453c4457c7edd110bcea7f5735d6f5882d8f27155eb4cc285a65138ad6
MD = 0293eeef0aa3392c93d9c6ca89c08b317622572d4de2286a4b9ae6c2f9c9e0e64ee6c483d4f10859077e3c6868430214
Len = 344
Msg = df18139f34b8904ef0681c1b7a3c86653e44b2535d6cecd1a2a17cd5b9357be79b85e5e04dd9eff2ca8b9a
MD = db9e171d6e3336631c9ceec6b4d732ce62b015939269fb69fae7d22725500e8a2fc9f1459cf0a31fb9d16d7c44583f52
Len = 352
Msg = 0459dcbc149333ea2f937b779a5f3728148449a9aea3662cdd2cc653ce6a2050f9c0d54bf9326c039b263eb9
MD = 464ba409fbb45e985f84ee24662eb7c042c3c2ad9649f1ac4a8b2be9c07d37ed2e4284362057493f6a7e52c356b05bc5
Len = 360
Msg = eb3f7002c8352270340b8da8643622e5f7e32cdb208a0dec06c6cb9e6b64cc4d8cb9de1d49397b3386464a25d1
MD = a26bd76ce42d818dbec462d8fe7cdd957e6b84ae8750fb5e1c9c76bc6000e23737e073a59b4600e5056524edc667909d
Len = 368
Msg = 47e3e3d8c68ac9d9f4b3759d8c7d9dd901e35b096ee4c8b6cbe0cdf467463630926c08289abe153bfa1bcde3cd7c
MD = b504ef475a568f9caba8352a0b2d243acdf3d2b41d8890a6fb3abb8aa28a29e0c7527d20e2d79b25b400ec27c314db72
Len = 376
Msg = 838d9c181c5ab59592723bd69360e0d7fd15232beada7591ea899ac78ffd53a32fc73a5fe522ed35d92a6e2bc148ca
MD = 53e99e1158d59032ffe4b5ea304c7d2f7a61b6b2a96ac97832ca26013549fe3f7dcdf926bd74ceabe4f1ff172daed6e6
Len = 384
Msg = a90d2aa5b241e1ca9dab5b6dc05c3e2c93fc5a2210a6315d60f9b791b36b560d70e135ef8e7dba9441b74e53dab0606b
MD = 4a16881ce156f45fdfdb45088e3f23be1b4c5a7a6a35315d36c51c75f275733319aca185d4ab33130ffe45f751f1bbc5
Len = 392
Msg = 8c29345d3a091a5d5d71ab8f5a068a5711f7ba00b1830d5ed0bcdfb1bb8b03cd0af5fe78789c7314f289df7eee288735fe
MD = e27b39a96255ff69c45285fca6edaaa3954ce32c1e3d9b1f60c1b6676594bb45caf0889fc11daf93a1b60746229689dd
Len = 400
Msg = 32876feefe9915a32399083472e3c3805ef261800b25582aa7c36395fd3ec05d47b49c4944bbcc2b8b5ebd081f63ae7943d0
MD = f96433cdb69a607433ea2eb77d87d3328867dc4076b67ccf17f50f9e08e89a86624b60f2ecdb8affcd431fc13173fe75
Len = 408
Msg = e2e77eb54f321f86f52ea3d3c8cdc3bc74d8b4f2f334591e5e63b781034da9d7b941d5827037dee40c58dc0d74c00996e582bc
MD = a352ab33ca730482c376bdc573c9d1dc6d3597f9be9f798b74a57beaa8e9c57b78ee6761056eb67363e882fefcad4fb9
Len = 416
Msg = da14b6d0b2ec4cf1e7c790e7f8f4212b8f4d05f50e75e2a56a5d70623c0d2e0115a15428129109b3b136d756e38a5c8463304290
MD = aae7ad977e17ac0e560c0e0186433420f9fddcd191b9e91567cee05df88f1e1aee50424a313998a873f7a9c289a02217
Len = 424
Msg = 2db06f09abaa6a9e942d62741eacd0aa3b60d868bddf8717bef059d23f9efe170f8b5dc3ef87da3df361d4f12bfd720083a7a035e8
MD = 85d4e3e5abcb1b59ca6f551eb43b43ff64890511f73a9083a2ce6e9c2861c6e9664c765629024f4b01b0cd1594a5981b
Len = 432
Msg = 26bad23e51c4560c172076538b28716782ee6304962f68e27182048948d5c367a51a1c206a3e9b25135b40883b2e220f61cb5787ed8f
MD = a44c7f84ab962f68283404f8c5c4029dbc35d2138e075c9327580baf89f292937bf99422e45756b3f942bf0a5ae4acb6
Len = 440
Msg = 77a9f652a003a83d22fb849b73fed7d37830c0dc53f89cea7dbec24e14f37197765206fe0e6672016e4dec4d9ebbe3e1b4423771a5d0a8
MD = 29c8bb39bb2aad419a00a80216ec71ec5ec9ab54c41927e3e3f2f48f079a5886d7fe89db98c807ab686d2339001d6252
Len = 448
Msg = 268c7b3a84849fec5c769bc4ad377dea10c9d20c91dd17fdbd9670a2fc909d0e212129ec40dee41dbf6194a3b04ae8be5e84ad5426ca4496
MD = 0dfc6ffcf4a387ec09ff862c6139a6f7ac77abb2b5e1f6dc814eb71525f8657ac74a7697c2975c70a543af0e227d03ca
Len = 456
Msg = b8324341a6891a6b5e001a7d2ebba6e02e8335c124185309a4c9e9907c43bd8d4fa73c527fdf783650316dd24b148870e1436ac05111e9cdcc
MD = 6278d1cc17fb6d54129d04987d4774fa846dcac4ba8b6b72f41e63dc387ce0081ba29fb2c17c6744edae24e669cc9e75
Len = 464
Msg = 5ef8b3d79d299bee2c414560c7de626cc0d9fb429884aa69cc30095ef1f36b7e03a8ca25fb3601189f163b209e0facf8dc447f690b710fb47b72
MD = 7ec9505f33f4a5493574422de078e0490b61be8e8d6f158192bb7d2bdc2dc335598dc88d9b443cd1c14b883a77119df1
Len = 472
Msg = ad7321c9a8b8f0bfe100811114270daad57f6e88772326b62d88a37a6f55c2cf9f759115ed6a590878e4dcefb592db151538db7de20229d26a181c
MD = 3782d2caa537294e809e9df837b1b07e2f1df07d0f4c12e12459f56eeaa478d5b3a41e519d9414eafa5ddd5661c831ba
Len = 480
Msg = 0719d9664541f0a824f71c83b809bb6afc973c9f7428e1ed11f7c29a558e1698b796aefb49eec2b098faf06bd43e82e1312bf0388c38a5bb523506d3
MD = 362c05f678df92883d56e19221391fb00d0f0afcec51d3e0feb15ba2fb60693b09d69118af649648933259d7b1e240ab
Len = 488
Msg = 5415c2596aa7d21e855be98491bd702357c19f21f46294f98a8aa37b3532ee1541ca35509adbef9d83eb99528ba14ef0bd2998a718da861c3f16fe6971
MD = 8f9fd7d879d6b51ee843e1fbcd40bb67449ae744db9f673e3452f028cb0189d9cb0fef7bdb5c760d63fea0e3ba3dd8d1
Len = 496
Msg = b979a25a424b1e4c7ea71b6645545248498a2b8c4b568e4c8f3ff6e58d2ac8fbe97be4bea57d796b96041d1514511da5f6351120be7ab428107ef3c66921
MD = e248a64b6ef112bf3d29948b1c995808e506c049f3906d74c3ee1e4d9f351658681901fe42c8e28024fe31014e2d342b
Len = 504
Msg = e64c7bb9cd99ce547d43de3cc3b6f7d87a2df9d8a4760c18baf590c740ec53c89bfa075827e1f3f2858ce86f325077725e726103fbe94f7a1466c39f60924f
MD = d1e5a72d2595f38714c6198ac14f8a5cdd894dcf9b4b8e975174b100df7bbf4f7ce291b4864f27c0b64e6330f6c1c82c
Len = 512
Msg = 91b7a1fd0e20072d9c5be7196e5eaf8df36fdf145895b30d4e4c02010d7c663499ac9d7a44732f4c7430511ba6fb0ae4b3dc9405523a054fdf962f5c5b79c423
MD = 07c2e0aeae30da83b5a6b320aa1cf727b10c2034583d7acda55648fa3daa017aa15588b6e2149101c56e3d7df7c76df1
Len = 520
Msg = 5bbc2d4efe63cbfc9fc221dd8d8384075a79c80a27d6a8c5219e677f4c5bb8338013dc2ab1770acf735d13c0bc704621ec2691350cf3ea2f53bded45ef8fc70702
MD = dd0bbfe4b799642191abe316df9d59a3743566778b4459c51c3be3f658bdce45516ad188fbe1a8cad8a1fa78f8ebb645
Len = 528
Msg = 129549278e8976c38b5505815725400c3d2081edf141ad002e62ff299d9a0743f9c9f25971710b194dc88285d50b6cec6e140c19072f51cab32a9f6497abd3e407c6
MD = ca26aec527fadcd5ebeb4eafa7c102f79a3c2edb452afd04f6162dd7a17bdd1aad7d616508a89a3ec6a40791d915acc8
Len = 536
Msg = b9a9f378adeff4337bc7ec10d526c6dda07028375549f7fda7a81d05662c8a0da3b478f4152af42abb9f9a65c39da095abb8161ba6676b35411234bd466c2914e00370
MD = 99914f684e0b317f9338af0c71e9655a3af7153eb9fabaae61454bf8de9e0bfd274c1eff6c4b550e47afcb3b20fa7d9e
Len = 544
Msg = 101da5b09700dcadf80e5b7900f4e94c54d5f175569a854e488aa36fb41ab7220b0662178ca07a596768528123de3b2a3d944aa412875cedfeaf58dcc6d5b4a033a53b69
MD = d3e32c9b271e11e4968397d85d76938b974ac1ba55bcbe8d7b7da02dbd7e3b9c9af0d98bbd7e50c436fcf9e3551e3432
Len = 552
Msg = 14761bbc5685b5de692973e2df7c9c4750889c19a952f912c817890546d5e37d940d13a14ac7925abbd875b8cd60e4920896ce6decc8db9f889da2b5489e1d110ff459d885
MD = 272222ed50631aff465c0e6fe49ecdfdca983bcb7231e50903e200b335b845108202c28315912c9c4fd50e2c6f13a9ea
Len = 560
Msg = ed538009aeaed3284c29a6253702904967e0ea979f0a34a5f3d7b5ab886662da9b8e01efc4188e077c2cdeb5de0a8252aafbee948f86db62aae6e9e74abc89e6f6021a4db140
MD = 8361b680243b1661d6f1df53db363cae41c2ebb7438c00606d76b9c2a253faa1f09d6f520d69d692ec1dca0c7885119c
Len = 568
Msg = c434d88468f1eda23848d0804b476933f24baeadec69743dd90d8455f1e1f290f6f1aaf3670c4c74f76d3ab83e9bef21ad8d9208c712ca478e70d5fb3c4bd48834c969dd38f484
MD = 9c26e96fcc09a76cc13d24ad25c9cef4300e96e97e4fb59b441baffed07f6a70b1464f2548c7fd7839810dbb9e9c1e18
Len = 576
Msg = 3064e5ba1e7751bf7198e0811ff4d4ca17d1311c25d9c3a316b562691cde75c974b0b52645c134ddcc709d77b6c1bd24cd684265d723c308bb4d0159e6b16d97ed9ceaa57436d302
MD = 1ea779739b204abe911b4923e6f60fece271eedfc7f074fe1919f0cbc6ce2a99234b003389520884b660165f5a1e80f8
Len = 584
Msg = 89d9521ad84b1c9afc2fbd0edc227193acd3330764b0d2cb71bf47c7aac946af85be13858b55976009f3b36b09ced4308052c817c9c4d0295225f61a9659a0874b88667cdcc5213919
MD = 4209bb8f869f6f17c8d5c368c489ac51a75e24a85a12de1b16fefc292ce636ff8fa360e82f05684f6b0b074ba370a933
Len = 592
Msg = 3216662da0227993d88288187177a0287de4eccf245d7c718b8045bbfb8869d93f1fb9e94d7478b0298e628c07e0edaab01dcf79264dc05f8b2181aa3f831dc949726fbcf80de4c9c9ed
MD = 64c45e018cfbc88f8f4ffe3cef0df3a94aab3049fafae28e28efbb2a4b94809eb302caf901010abfa194f72965663d35
Len = 600
Msg = e776e6749c5b6c7def59cb98340984539280a9874f80412d4df0ee73d58acd1094d49ed4e35125834cf8cfe349e599144e4f2e200aba4fd3eb6d78cde027c1d5620e0270b5e83ab26b8d32
MD = 94bd67b7f2587b0bda5487cc45d00e4365f1ee40073cdf0d23a5ea3fba01eef42a46bfbac5306d67be02d8d918ae5c9a
Len = 608
Msg = 5d8f84b2f208b58a68e88ce8efb543a8404f0ec0c9805c760ad359d13faab84d3f8bb1d2a4bb45e72c0ec9245ffda2e572f94e466cffa44b876d5c5ed914d1ff338e06b74ad1e74d1405d23d
MD = 947350307748c29467f00103d0a07c3c228c5f494fc88fe2352ca5d10449d0dda7076780c05439a09694eb528d1f477a
Len = 616
Msg = 357d5765595065efe281afb8d021d4764fba091adde05e02af0a437051a04a3b8e552ec48fb7152c470412c40e40eec58b842842d8993a5ae1c61eb20de5112321bc97af618bbfbaf8e2a87699
MD = 32286970204c3451958f5155f090448f061dd81b136a14592a3204c6b08e922ee5bb6d6534dbf8efb4bb7387092c8400
Len = 624
Msg = a8cb78e1485cbb7a9474c1c1f8e0f307cda5139a7e947df5ea20ac330a6dffcad4a9bd755f9f58724789eeee532615be550dd84f5241fde0e3058aeedbf287f02a460445027f5e6b3829bf71ecf4
MD = 51168bfeef8a981c0def0c4cb067baf15ce5feb8d5f7e9d6076b2836267391aee1fd3a0b5d3434ceb5cf2d6fa06fa063
Len = 632
Msg = 81acca82545e767ab59dcc750a09849cebad08ff31c9297f4fd510ebe6c27769938319180ccc66f36b1a7cf9c9f3538b0f6f371509f77cf0bc4d6d87facc85b933f2e27f8e1bf6cf388f80c0fcbfba
MD = 4ae44d6509986893a8414753b57d11f9c554d89c15ad6d70687c56c6c2ac73537acbb0d51f48e6bea6cf762d58890d7a
Len = 640
Msg = 94987498b1ca87a6f3fa4b999db726115c455d0ec24029b2f5810e49a94668864b8c470f7fc07c3dcd97f41c973b45ba4fa7879ee7546596881573b6863fc39d940eb3fa3444084f721341f5d23d2561
MD = a733b118be72a187ddcbe5ba67e04b589f9cd9f8482c4bd9d64c580aba7d19d2d1f9c1ddf95fe6efdeffd44f67fcabb5
Len = 648
Msg = de6b32c2d40d0659166db235259b530ea43f44e75d8b3e9e856ec4c1410bbea3696964af8b6c5dfd3304282369a4bc4e7cf66b91fecd0c7c105b59f1e0a496336f327440980a34614ee00fff2587d6b813
MD = 17ba30c0b5fc185b3245313b83dd0481145953101128914765784af751745b8a2b6a90a434548f3adaf1f07f18649890
Len = 656
Msg = 854211bedacc19f77b46cfa447a4ad672ea9b643f09f5cf5274ba28888207e2466b38127776fb976db8ad7165a378df6ee1e3a0f8109c9aff7e0d6126fd71333c6e6ebe15d7a65151d6a4a83b82c8a6f3149
MD = ca85632a9f7c32ac4705c6458770025dda4fd07a8d5d6921b897b0da490d64400587649f2d20bf608b9a18d071b63b48
Len = 664
Msg = 822373d9d3d5b06a8da48a43095740fb98c9caf717350fd2c3b058024ff705b9346b7f0a495a6d4d93802bc45ece777f8c6a6e7c2ef6b8135115ff911a2ba5241665b6f7cbfa1b9d93b011b3aaa1dac1853fb2
MD = 6e84587c8c6e54353a6032e7505902ef7f0f0538dd1bb32922e13a7d4d98c47a541015381eab27e9186398120da7fb32
Len = 672
Msg = c04b701f688092bbd1cf4217bc4b5877f2e60c087bdac46611482a61d51f820140403bc85be0c336332da0938734bde8c502014f3509266c73c6c93c22a1bd0ddf15a5ce7410c2894e9d092e32c079922ba1abb7
MD = 75c585503f15a526113608bc183180b1cb80f4d1b466c576bf021b1ce7a1528391f70e10446681849fa8a643cb2b6828
Len = 680
Msg = 009dd821cbed1235880fe647e191fe6f6555fdc98b8aad0ff3da5a6df0e5799044ef8e012ad54cb19a46fdd5c82f24f3ee77613d4bed961f6b7f4814aaac48bdf43c9234ce2e759e9af2f4ff16d86d5327c978dad5
MD = 02a09d37d31e4365c26bec0eaacecf29eea4e8d21ab915dd605248764d964f10ebb8fafdb591982d33869a1d08a7e313
Len = 688
Msg = 0b7dd6709d55e0d526d64c0c5af40acf595be353d705be7b7a0b1c4c83bbe6a1b1ec681f628e9d6cfc85ad9c8bb8b4ecac64c5b3a9b72f95e59afefa7bcec5be223a9b2b54836424afde52a29b22ab652d22cce34b39
MD = 5c84ae39d959b79555231746ad5b33689a31720ed0070f6772147977edd0aead07fb8b7b71b0bd587ebc5c1a80d564c7
Len = 696
Msg = 3e9b65d7bf4239420afa8639c8195b63902b24495b95c4143978e49843d88a92d1feed2eed1a88cd072d6d04ea26dce8ee4b14896fdb69bc7ff2971ed8ac5655148d2e9921218d74efdf17c56b533d0bb17d11e07d7458
MD = ab7890d1b51af10285752bf9da5eee5c3e87a285dc33262d0261aa9a575f303e94845d7ab21b48f4e6884568cd78b550
Len = 704
Msg = 9436da433d1ebd10b946b129cb34bccec9b8f705aaba3f8561352ed36a8449aba2dd7ba15b1bc308b0c02913163af63a346524dff5521432db477f529606afb5d552efc95cb040db566b4d39eddaa19319e518a7b5c6931e
MD = 968ae9104f9c907c5a72936250dfedd62cd04f6e5ddd2c113490808a11884449aaef5d013ea3993a6cb6fc5c08754408
Len = 712
Msg = 37254bf9bc7cd4ed72e72b6bb623a0cc8eeb963d827aef65ad4bc54913235b6d3551533ce33421aa52ffbf186eb9a2787188eeb1b52ee645c6d4a631bc071415c80014940c28fbfeb0db472c326c8dacfd6ab21f3e225edef3
MD = 975e10fac9aa77b780e5f6c2151ec4a3c72ff26e41233cc774c074df1b78cce5af1191ba955a0bce15926ae691b0ffe7
Len = 720
Msg = 79e77cd08a6ef770bbe4bedf61557ea632b42d78637149670d4d6157d56ed7b2ccaee45d9439dcebc557b4118e86c15aa0ccc21c474b21abda1676cc56434d6d46422993e66dc99387dfa985358accf69884b9dd18a2c4d04448
MD = 94729f5f99a54f5a3ea69233ff9d522392d4596eb6ac2bbb07492ece3c67317412bb47ae317ddd20536c3adc003862f1
Len = 728
Msg = 64b76cb554f6becc238a3fcfc3eb97993667ec82fdc3fb28d42567709c3250c7997328aeddfdc2750451ac462281bf66fa94f4b8712c7a8342660574f20268e707c466627519c56259fea55be91e10faab3ad2ade6ce8b6557f202
MD = 26d48ef5067d704ee9e2a64e399de23068908b3c911ffc4056c168362c37385c92d37d51354b6505a82c4d22fec37eaa
Len = 736
Msg = 3df27829bfb1ab7d381f146b30370ef56b392b73b35b1be5d8bbcf88f499dda7f3c327b45350b8972991ee466545de96560cf451711fda884e3d9b2af3e909d655d25cee1c931beda79c40fa507097bdf1126771a7b9543ad5cb84b9
MD = 5fa4ebfa24150236c03409f0857b31cb95b0150f381c8858b01559957b1268f73c698709233e6b15468675a102d0c5e5
Len = 744
Msg = b00f4e67ca08ccfa32b2698f70411d8f570f69c896e18ec8896cfe89551810543303f7df0c49f5b94783cce7df8d76d0b88d155633302d46003711f233339b1c9a8c20164ec8a328890a4932b7d90d92d023b548e4820558f8bd327010
MD = eaa756b5892fdfc793d74e3f9f4d6c7a5a6a2241dd11e0c38ced59c8ec7be377a41d1d06774a5970ce9722d8e119d0ad
Len = 752
Msg = a4f95f6a46a9cbf384a7e98e102d1fdc96839d1bf26b35a5a0bd6cb9734fd17e8a178d4581943c0fe469fb4fe94cc2f15e1ef59ae05b35324eb57ca07dfc69d42d41d80b3c3bb64e1aea143c7d79790a56697dc803ec93e6c68f27f6761c
MD = 1aff8d9c64f0c162ed0195d1f3a342a010d14be0636903c48020ba42de1cfa8b98ae2142d89af3e69e9eb4c735857dd1
Len = 760
Msg = 02713084bf93fdc35135515243c3bc0f4b2b447f2d3461c0dc104cbfe23479ab036762a91d1987c953f7b3386abc80b8734a1d4eabf94f3a9f2fb62c943152b5253846fc2ec8dbb2e93dc74857a7b05fe2d7ec8040ba8b0d9ae69777ee739a
MD = 84da02114e341a3636f00822b32bd21a8a1f7b39f2956bd97f39346fedf9aae63b304c65c93a541e8bcda549576d5f27
Len = 768
Msg = 00ce225eaea24843406fa42cc8450e66f76ac9f549b8591f7d40942f4833fc734a034c8741c551d57ddafb5d94ceb4b25680f045038306e6bcc53e88386e2b45b80b3ba23dec8c13f8ca01c202ae968c4d0df04cdb38395d2df42a5aff646928
MD = 81d6e0d96575a9b8ca083ee9ec2ead57ddf72b97d7709086a2f4a749d3f61d16423463487562c7f09aba1b26e8cae47b
Len = 776
Msg = 7af3feed9b0f6e9408e8c0397c9bb671d0f3f80926d2f48f68d2e814f12b3d3189d8174897f52a0c926ccf44b9d057cc04899fdc5a32e48c043fd99862e3f761dc3115351c8138d07a15ac23b8fc5454f0373e05ca1b7ad9f2f62d34caf5e1435c
MD = 00e95f4e8a32a03e0a3afba0fd62c7c3c7120b41e297a7ff14958c0bdf015a478f7bab9a22082bfb0d206e88f4685117
Len = 784
Msg = 2eae76f4e7f48d36cd83607813ce6bd9ab0ecf846ad999df67f64706a4708977f0e9440f0b31dc350c17b355007fed90d4b577b175014763357ce5a271212a70702747c98f8f0ad89bf95d6b7fbb10a51f34d8f2835e974038a3dd6df3f2affb7811
MD = eb396cfaf26ee2775af3c9a3a3047664ca34cbc228ccbb966df187d518717df6a328ecc316ed0ed09b170080eccc486f
Len = 792
Msg = 093e56d33bd9337ad2ad268d14bac69a64a8a7361350cf9f787e69a043f5beb50eb460703578a81be882639f7e9ac9a50c54affa3792fd38464a61a37c8a4551a4b9ff8eed1f487ef8a8f00430e4d0e35a53ff236ce049b7a3abdc5cd00b45c4f3d49b
MD = 4a339128486e5b274fc4ed538c0ec9e57f780e9c500c5f92b04ae81a22fbeebf3785259a0bb3b6d9b47f31873cd8dffa
Len = 800
Msg = 0593babe7a6202077c026e253cb4c60ee7bad7b1c31a20da7aa0ce56b622eb57ed07d21a7f0ae6c6fe3c8398cc48353decfb287f1204e024fcf82a13059953b9f85797ab2217dc8dab34a13226c33104661c1ca79396e7d97e91039d32bafc98cc8af3bb
MD = 5981815c1618cc49cd5cf71a4b7b32b8cd7b7ef553bfaef2149ac723ff2582a2d345c5bd05943e155ced1e5f091c5601
Len = 808
Msg = ae1828047c5f82a7b9712f3399832124b892f2f7aea51c8fe3536cd6a584b4a7777cc1ecac158c03354bb467b8fe2c8ce2f4310afd1e80fec51cc5ad7702566b2c5d21bc6571e4b8e7c59cb4c9e23f1ecb57ada9e900e4aa308874c2d12d34be74c332bbce
MD = 7257f5bfa7d33d1cf5f4550d0cb78750e84c5b7d25027da6acec64bdf30879a0e5c97fe7c468e743aa5ec2bddb29d193
Len = 816
Msg = 3bceedf5df8fe699871decb7dd48203e2518fb0fce0f865f46adce5c133a921320bf40915456204869a3ceb5fca3ed40e0a41a64b8951f0fc580694cfc55bd1f5ce926b07e3e32ac6e055de9b961ce49c7ee41e06b024559b933a79518192e969855889c85d1
MD = 60d7f8bd85fb7a13701db5aded2b7771ab5e476ec34f1fd4298978defbd2b31bb2979391559a164b3ed28f6a39031a11
Len = 824
Msg = 6c36147652e71b560becbca1e7656c81b4f70bece26321d5e55e67a3db9d89e26f2f2a38fd0f289bf7fa22c2877e38d9755412794cef24d7b855303c332e0cb5e01aa50bb74844f5e345108d6811d5010978038b699ffaa370de8473f0cda38b89a28ed6cabaf6
MD = b1319192df11faa00d3c4b068becc8f1ba3b00e0d1ff1f93c11a3663522fdb92ab3cca389634687c632e0a4b5a26ce92
Len = 832
Msg = 92c41d34bd249c182ad4e18e3b856770766f1757209675020d4c1cf7b6f7686c8c1472678c7c412514e63eb9f5aee9f5c9d5cb8d8748ab7a5465059d9cbbb8a56211ff32d4aaa23a23c86ead916fe254cc6b2bff7a9553df1551b531f95bb41cbbc4acddbd372921
MD = 71307eec1355f73e5b726ed9efa1129086af81364e30a291f684dfade693cc4bc3d6ffcb7f3b4012a21976ff9edcab61

+ 408
- 0
strobe/python/kat/SHA3_512LongMsg.rsp
File diff suppressed because it is too large
View File


+ 310
- 0
strobe/python/kat/SHA3_512Monte.rsp View File

@@ -0,0 +1,310 @@
# CAVS 19.0
# "SHA3-512 Monte" information for "SHA3AllBytes1-28-16"
# SHA3-512 tests are configured for BYTE oriented implementations
# Length values represented in bits
# Generated on Thu Jan 28 13:32:47 2016
[L = 512]
Seed = 764a5511f00dbb0eaef2eb27ad58d35f74f563b88f789ff53f6cf3a47060c75ceb455444cd17b6d438c042e0483919d249f2fd372774647d2545cbfad20b4d31
COUNT = 0
MD = 83dd81285c36d86dde72631a1a1e0d9c12b0e2842d499a63b00de87f11839565b21d9416f154b72034b7fcd41d2f1d9eac184eec823547772826ed90c53d856e
COUNT = 1
MD = 5c37bb6fe060007ce3fca1e6d01ed1bdd6e737f043a2929548cf1b08224a193e03c7314be44a496c8ecaf8a7458770f59cd27336a38ffa40588539572ecb946f
COUNT = 2
MD = 1866d500dffa85d4bb2b466317b9f60290b6840a75788fab44c6b58225f4a9d77ab0238443190cf275435ffe896c207f34ea8c99327b5628d00cf32955ae7c90
COUNT = 3
MD = eb3c290d732fdf0768dec3f68703e8c1b6079682b51f40a6b9812977e53c4cf4e22b90ae75757d7c15aba886bfabc0da6a53cf6394002edc023a566d991639be
COUNT = 4
MD = d9cb2be61dbb6e4be6bc13eed890058536cef9a15f66c50529f086beac8ace00d1daae81b3b9f35529343ef1f14eb10e368f1cb2ca52a827dc21d389a778abd5
COUNT = 5
MD = 9ee2322b9fb7d8b2648bb8171172cc6ae801bf7ace214366f5b1af0f49067130318eb355e2a669762919afe5aaac69bd4f0b1a8811da6e789fb6309b036fcc84
COUNT = 6
MD = 40433cb85bcad8d5b80f92915b59215d0b4f328724d954edf9fb0d198bfac1a5f9ad892803f8b9227cc98eb86b411f34bcaa5df519ca898c95bb4b1038f7fe64
COUNT = 7
MD = a9b539dce84264edc877e52482d42e2e24c675d67b14e2627bfb6813e3ec4f2df1dacaf244fd616c229f65b5f83070219b6cd4bc8d20819e6072f4ba81701f2a
COUNT = 8
MD = 068c9023dbb8c60bc2bfd60179423f4ea5b6cba524ccfeff66e56407c1352d0f2fb747772071070892a116b26662425ca12e571b68cea9389e9b492107e818d7
COUNT = 9
MD = 0821ff6066756773830b396ff0ca5a3de282af3585a4cb75dc66bfd82b8b28b3431b98e82bb9123dc1a88192868232e66b8d256b3d36d3ce3925c44f1fdcc8ec
COUNT = 10
MD = 0d44e04872c48f1a58b699fa8b8589079c336f5ef75c49fcbafec604bc56f06b3e5d27034557daa2bf64219d36ec5e5769d7ba3779ea60138d62ff47e9ddfe74
COUNT = 11
MD = 40984fc0a65f0d8676ef61674c32dd02bb57e02e062fe0d2da06d39e98fedfcbe294b131a4f3b17d61067b05acc9a88b4bb13f59b6dc672c0a751c5e6ca39d87
COUNT = 12
MD = 32abe9d60b674ee0d0ba92ce1994afcb9e11631b21f9315a2c295852969bea29dc1709ccf6af63c4f066d81599e210e2aca54ef3067ac469340c5f5e70911891
COUNT = 13
MD = 732ffe98c39b975b307c2c3d913e6745bbc14f25aa877d969b64ff2f3aa11fe7946df522e053b751856e41528ec4e6fd3e80c95e629aabce410b7b41d47b4e0c
COUNT = 14
MD = 0220a4b30c0b130f5a2f36ab0719266b45fbbe7ff390b76470bc685fee243ed0f1aee3a7742d7d2c2ff8009441f9664d508267160221308331b26af94583bdbb
COUNT = 15
MD = 9012cba6964cf6dd285b1bb9a1ec1d4e44fa2ce2a5cd47c3d313f93d50fb2613274eccb455423ec4cfbadedee97b4bd20f5f340427093997670a0c8484f61ed9
COUNT = 16
MD = 407204aa0b992cc9ed71bbb7f1929270ffc92bc7b1be763496d6f7847c439f1d5bf6b7da4597cfdb225a829907116ee26fd700cfbb47b64870ae0ae0afc868c1
COUNT = 17
MD = 5a6f4097c49da54340cd6bde5e15bdbb63823956f516d1b784f1a19b82aedac261ae2fe6c17841ff48df1d7ac8914b8c10d3456448a08bbfcf261b76c59f850c
COUNT = 18
MD = edeaea8d6487f61f54a5506efa31e3f75ab67e5d922bef824a8eb859a8937f00555e651d010f0eec06ad8db93f700834fbe915f9955a0eadfc52023f2653fd95
COUNT = 19
MD = 099d3e5e4fd60468274b7f486f379487786596ac216bde7f095ef4a1617e02223d404cee0dc801175c3dbd02947b37e3a26628b7573f92a6ae26e34eec6800d0
COUNT = 20
MD = e00b1398989fb003c43803bd76529180500bd11c1b5d26f47bb445cc912256a69800443c873e6b37a1c22c00af1baab2ed8652e828b1cdbb708c372da6346e69
COUNT = 21
MD = dd4a911750c5cc144fce016196e16d7e5d7bcbdb0a66f4d0042969fb07dd7b6564f9f170961acdc3fa722ef53ad1dbe28e3d26296d24cb4e671dc35a653417e1
COUNT = 22
MD = 30f6fa4eb878c2af14dc38eab24f6fcfa26ead343915294b7d5553d3c928aa344db31393ce7ef69af4f431c63255729e343627ca4c6e860c40fff1b907c5b1af
COUNT = 23
MD = 317486247c23ddb8c1a768f5e6b7502e3fb843ce433e3b9ceb2fac93c3e897463b5bf3e0008c0f04ad424bca268d2d9938fd65b76ec1899d6514770000648f2d
COUNT = 24
MD = 4a1631dcc913ab9ca3bf29392ab7929c36c8993a150264218700428bdf9f8221400d622d6d63c8b8fa6ac13237a4c4b6a42695084ab951c63b2d0c0d2c14ef83
COUNT = 25
MD = ace129a0f644788024141469ce5aaffb39bf182de6e0c35a2863d4d4d37292d73c299fc04fb8fc468c83075328d40c8664b4e5cd856687aac7623807ce23f824
COUNT = 26
MD = 11fdc99ba5d3b3ff5b766331ff1e47361613127e5250a4a8336d912dc5bce0ea5c19d538f344dd6ec1f18b79d58c9746a3b0a75545c56baaad62526bd1e1b532
COUNT = 27
MD = 33516270a676d7355a674c361ed017b1f227f121826ca7bc80437c397ce8999eca0fa02809eed2ab78153f7b69107a3736e70c749de4fc93af512dfe7b48bfe4
COUNT = 28
MD = b523a5703a9043425767f83cca5ee283b7d21a70529f0bb38bb9852c630d1a5e73b7046190cb9a668fd6ab6309e1287e6ffb403c44cf1d96a535a6e941508d2e
COUNT = 29
MD = a2e21974e2b234f670d2f956ff3dde1057c1d386dc927123e13d17cbc04bd5569c42b609a78436318bfa86760edf0020d7d49a8c67717c71297cadcb7071b1ef
COUNT = 30
MD = f9007caa6030a345b0ccb9466450102bb95d99d1f65f324978bd2e98fb87dfb2a23fee3a4959dd15f23eafd7e7837f3df74390616be737a3d78c9667ecb5f205
COUNT = 31
MD = 83f3c1c5e74d339e8a536a3c74c61bb85abfac85b946e9da25bcbee05ee56d2da8894babbb1b67882f1a77adc563b7260af6d2054bcdf3360dadc2d2e98a6a49
COUNT = 32
MD = 89e1ea40b7bdc4ecd47f542e3c178cfccf971662d97923da52dcaa5fdbd50f4f594189dc99450e501f5b6a717ec88596e27741c0ef6df4fb1013764bf6d226fa
COUNT = 33
MD = b7a0a34a9222a3cbe72d3a6f78adafeacd4750c040b6a8d6326f5f390c7f32ad195d3d1678b00c9485f42687555998e492ff8f10bbf8fc8c5a438108766bbe02
COUNT = 34
MD = 1eb9a1f6763a16160225da065dba9159d571ed70b38cc4b1041bd0ec3d51532451a8a16415faa23f597a60c36056370b9bc649672cfae54523abf36b3b4167fc
COUNT = 35
MD = cc951db6163747248ed90c1d09c73091a4490f8a8c8c3830fc2935f9ae704a68496717c68d1ebf0de6acbaacbabee3ebdd6d707a277fea9ae0eb1469e77adb28
COUNT = 36
MD = e6c0d8481d99875407c332283d90963f8890e815a9de9dbf92b99914b86f9536a1a6d513e3b172385e74e2683afd7135421576e89fee0a9e09765e4ffd2adf87
COUNT = 37
MD = f61bbf3dd68c87155941c9997bdcf8f36e79c901a8e89305b1bbdbfecfdbd3b40827dcf2fa9ff063cfe5ab3788b74697541e32454e3d17ca4f406a02dce46a60
COUNT = 38
MD = ac3d01ad56e1fe6b2a063114a627651e406d5c9fe46924916bf66807ae9246507e80b7b5e9352cbe281e70971e288b9b9d4445202949c533108fa5bde3cf2d17
COUNT = 39
MD = e20b5c59d969565a3d55069d17f04db5e31aeb3611472266292498bbb1055e912f3d53a6b7ab579ec8604703ee601feef704bc61a29aa517761bfe99b6805da5
COUNT = 40
MD = aaea7b67398b84dc13d94bf3394a382838604da0b54855a8a9779539c6c7bb8b2bc7c25e148e26080e9b5faad7f69531b0659e5d501123f122e5dc7ecb0848d7
COUNT = 41
MD = 6a9a6d03bd65dc108f2518290aff4c1ed978e9e6192fb43c460a541093542e579e7c701dba97aeffdc07f69a2fc9ec5d1773211de1b2c915134764488521d262
COUNT = 42
MD = b010bf4cd6c11b7ea818126751970af2fba64ec1812c60d12d8b0af1400c7853e5d0209b701713aa610c2ce29fd93e0129c6e76c94d1773b0ce680cfca771031
COUNT = 43
MD = bfa6d76f4843c0748399de9c0ee622b97bf4a8cd8be64a6a02f0b0b091ff2b389e39c9d9b98e9398b0bd938947c53cd55c787c01d21b728d295ccfd12c15b41a
COUNT = 44
MD = 98debcbe42ddd1034038010993f243c7ce11a0425283682ac2868b2fb10c5f84d2a671b62d3ed6be478bc5c486c49706c5df493e862eea1024feda564467cec9
COUNT = 45
MD = 983d8fa4bc7f713e2bc160c1fde27d26e394f25912af3380f81760d97fd9c155ee2965117b65b24be164e41625127f6792e36eb439384db0cfa3bb8f91f8216c
COUNT = 46
MD = 4124a54dde312129b77cec207548a67d2866bb7ff2ddb74e093bfe27191996c4d79a24203b7e3fd76abf758eb8ebdb62d07a75055550d67ccb30458519156642
COUNT = 47
MD = 14918e30204e07b7cab695d116ef94422fd6b4cba1f9de664bee06180567781eda1719de6f0f1fcd4d80dbe939322197b0d6153d51323472197d6247943c2e87
COUNT = 48
MD = 4a6d78826f0da3db5ca539e69778f0e31a1526811463ded44cb2ec78673a73177e607e4c86bb1241e03937afa140e856a3894dd8500c5d9cb3f4e40bec955369
COUNT = 49
MD = 0312a03add84199dae17822ed140fe5ff6de2bc6a4a3cf8c02fa0ff662a6ab86085bcf5064d16a8f1966c9a70670d86b7556afbde68b9efddc26f013be67ef37
COUNT = 50
MD = 3d4b176513fa9b5548271555ac2ffb74a5659422085c4dd4e1dd9971d14906f8cdbbaa5253434bb303eb3e9cfa1c467920e0e21efec08f238d21a8003e4baae2
COUNT = 51
MD = 7640091a5dada4407ecaf85f0fc39a353807c7969f4aa0e777c9a35445dd390441b19d622ba8a3d888fff85ef27f4153f1074d9d791c1aaf19da6c792b4de145
COUNT = 52
MD = 32d9dd94ff447c5a96274ae06f59a6a48779b6ff7e0b961ae39340d87594ddda2024ac5fea83d352baa0c13c26ab081c6d7f2791c5fd18114f2e6777df3b91bd
COUNT = 53
MD = a9e2a1e4d33ef6a2941d8907393e858aa1bf9a9f4002a2f25925ac45bc5d1ca32fb480f9df6e67a6d121499a4332fe97ac002cd9292820f46be249a2a66f9d7e
COUNT = 54
MD = 107f6978d6e3159aea6eba5d0dfce9072f095dc2303ccdcec18332fef0cfc671772f984ed9be5cabb297351370d461b3a137a60574d59f88be8584502ad645ed
COUNT = 55
MD = 8ab80e9f94bb15ca1fd23a5e16b6ecff9804c7608cf43cfb52f96cdf8f790038131c5e150df298ee613d856c523a69e443e6e1030e88e0f85d972b53cd61b9b8
COUNT = 56
MD = 103be36ae53c9bd8953b6a741c9d1bc0715e0e454e0dd8c21e21b058e65570905912df26e47693098495f54d878663c2a16c64b5d3ff4d0548e03e1afb1fa275
COUNT = 57
MD = 365d9e966773d7329e6ab9cdcabde01315a0dda4315b0a04447587e2a3a462ac2f52e282e0a86a7b2836ee08e5bcb7813a7f69682749b65524a544ec7f4ea855
COUNT = 58
MD = b0eb14a9962e8e25003c682e3462188aaa574f91bd6a5e45c77981d6dc4ae23772f6d992db557117c4e4092e38de00cfb7e30497a383eee8a60bd8f5c52b3afd
COUNT = 59
MD = 1c8d7b5a951258e4f2f56a664c79b4b921f2296d360b6cc91eeb5cce08180d6d1ff0296db5ad9a7a4c2f69a5c2fcafa550961115d87713a7da3ccb619ec79733
COUNT = 60
MD = 7effcb7a362e949a20aedd440451780a5910dddf7871eb9bd128077c15d7915586a527b42d1ee7e6c600eb1d7a9fc8b53e12134ed769df020e48939e730d2087
COUNT = 61
MD = d2cfef685c4db75bb0993197297c3aa2aa1958b259f522399b745deea39c25605519212202e27352d2518bd846316dd6ca5c8291335b7e5cb97c0c908d41b0fa
COUNT = 62
MD = 7af4cd91caf0cb33181e35e5d4c3095657abc0bf25700510f3f23d9dce4aec4efb721762764a907d05d2b235f1be8021bb53b4a944e9520835662e5d02342030
COUNT = 63
MD = 2729afa94ed2c15c6b639effe463b59b7aef4c329ebb794aa398475eda6fffca5a464f70c2c613b18eec13fc03cad18f6c8d7ce83f406ef2b9acb63001295c01
COUNT = 64
MD = a240514383171a8e485c92183194086c17ce07554d7fb58da380ee9666720797544f221638a69cd875a80cde52a5135477176f087ce22bf538b8933f73e02ebc
COUNT = 65
MD = 61c67ce44835eb1678f4381f450c0154f85c5dde944da2c752ade52650f5f35060149e500fa1cac82a849e22a827871b7aba0d41e92f9799382c5187b95f14a9
COUNT = 66
MD = 9c719e6d3fe0104a8015b5ee829f2556c1905ebd3e7dd1eb845f5f3faf96f365ffbf8bcccdfcccae126ec0d440beab3401edc1cfd39e5a73cee5b5bce6db39d5
COUNT = 67
MD = 9ee4b5c9e3c167a5027f7cb0236609065f65d38303ea9512b8392b1617b359aca86ec39ccea50c120a7e39e02803dac19009a29bfcc25813fecbf4ee9ab017c0
COUNT = 68
MD = 70194e39b3965dd56895fb99ae119574ff8881e36b264ac849a90889f043b28644caebeb41e4e2199dbdbd33612c2dfb49530265571e61ec5fcef93b53629e52
COUNT = 69
MD = eeae9d8b4794fbecdb52ffd812a51f9a4f53d9185fb5d567c1d7c8518fce9873fd5f5de9a73be1eb8bf05a64e6675cb00021646d1203adb16df46602d0ff21ed
COUNT = 70
MD = 39f6fe4c66a81aedfa8f7ddf15695b9ef10e67276f6dea5c59414e6b62e96541f6f02e22beb9d42bc9f7cccdcb80972db1c7ca4a2a508940d41d34f06524cb67
COUNT = 71
MD = 60a1d519352f06d9ffadae03ddf5a2e1fb07236a91ad67bc010bb2b998ef63d45e5fa77b40e411573deb65d84c410aae3bc09baa5af1b3d8c9b4d851b57ce567
COUNT = 72
MD = b3476e4cd13e4e062a50bc17747f55331362bef40adc943846022893ede5925ca1a0c1323ac98063a830793f93e1ef01082c1420c4b7ed78c24656e06b03f234
COUNT = 73
MD = 954aa26ffa2a4b21923e84524507fa60bb7069b53dcc1007020d49438ab2074985f1e80868aa6090a30636e308c34640ac76d1d73034a1dbbccd5307f7005937
COUNT = 74
MD = e83ee97d1cb5d52100cef900ffc2c556f7d3730062a11f371e6a7e0eb503cab9059777be2d4dd31d02a58984444d9835b345c0f432c11b57854e3030cd5cffce
COUNT = 75
MD = edcdb391b93130bc87a2fffbd12434bfdc0452a3163b8b24ef2aa67716b5a0d06e36d11ce8fde2b269908de51659370ba9e3ea629d7317610568c6369dfda01c
COUNT = 76
MD = e851971911e8dd82bbd5553d966da4c16984f5b61b3902f886d3e0dbe22f592d51f3facbd66431e5c30d1340673e21e73154acb256e3386e285b09397801127e
COUNT = 77
MD = 382cdef79385947d054152eb35a8807ab4c52e4341c66f5cc0cf9826e90a26dadfdf90a390491544376c39c3fbd10d6d05ebfefc0e7cc0ccf2a3851c5eab4bc2
COUNT = 78
MD = 0b65272a6f8c48d621c46bb5227d89798bdadd5558da1e271342a81afdcd68086c28f1715b460b3ea996cf16d5ce0c89e82f4bfbba167aa8e305136f78ee18fa
COUNT = 79
MD = 89d0dc3d84b50234861ad6fd1b67ccf46c8f1d6f871556e6d6df004c59805370c83fd981e77de4251e331cebe42530fa353e7260869372bd886992a706c6ad84
COUNT = 80
MD = 4a8a89080d3b40248d61b4c7d5cedff2151c3f9b3766ec8a86b6e03b3f611cfde6d2de6a38a118324c188b2f2ff9707da2d485a3bd6aebf69aec54cf8cd2e3ba
COUNT = 81
MD = b8a18d94d277cbb8f7e72d5b6175b8068080b6e34618d467fb3d685b317d4f0a7d7b14acbf5048186b3ea78659c4cbd62b02090d6d35ab67cabc14073db03cd7
COUNT = 82
MD = 4305582ad6577a61a19d68ad2791598bec3a14c430e1bef55179680c75fe96af6b906fa7dcb7786bc2ed94c7e17e7d0626c1efc446f10c955a956682874d8dc3
COUNT = 83
MD = 420bfef261e5f21146a4964224fbd7976cb8b32dcc19ba1eb4c37db85e12870e5ab61f31d2eab969ec6453079a11c0e10c7f5ea44b75542f69b85d6d3821ee72
COUNT = 84
MD = d2836254ff2d5878e196b69fccc932b269ad8e76ddffbdebf1f50f4777422697badd87a058b5b28ebeca30d1bd595e8ded1a2c53f5c0d19a2baa3a944aac828d
COUNT = 85
MD = 4aa68ea3a292de6af78f5e6d50758efc58f6627e27e2fa26155e9ea05d845a18615189b62040da5548749b2438ca18b8d43d1cbcd4a664caf4a688826bdc1760
COUNT = 86
MD = e4ef2efdce78c3548d7d857bafe8daf73062baec7c98648a73a52614c765c0471cd391394cf8bcb61ffad8ebe4f1ab2a5f4532c39289d52111e264747921fb38
COUNT = 87
MD = 883d4bbf5e4d13df161af1b3ce6eb727614561ec119993e5fffc03b3dfe84ddcd8964ca239e4c148fa8414927c3031de74eb092351df1886a38a8432141caff7
COUNT = 88
MD = 0cbd6dd1ff53d55b6499614fe81d60841c31d9839e0de5d2b397d3a88a154d9d90aed7b51c1d7d3d940d105553dd44be515a3791f69ea255e1232101be8ebb01
COUNT = 89
MD = 908c2a8b51ccd7157ceb4dc43aa8a74c25358ca42e81b3b799d717476a74257b4c4418e7edfda5d8dd7679145359b9b07938e3806afc30e8ba297d73d0a79dc6
COUNT = 90
MD = 5e8568aaba4fabbfd20743b4f3834646de103db894486245e7c7ba7ebeb84767b687923262a6ed8d2cdf2993d41b66c9899beccac761d93e3b2ad310e31f927c
COUNT = 91
MD = 99f1ebafce3c2a0ddb4250456c760495e37879d197d282852822a72cbe8f7c83ef078f7bbbd8a234e8b36d6eee17c9b2cba8ae3d6a1c4aa6b8dad422ce700470
COUNT = 92
MD = 977ca1aaa02bcfc9ff51cb01ca5384c0c9e87df076a6405564da26a751f3d76409e4e42447a364afc7291130b1e68df1e8febb750e0235d74b975830627221b3
COUNT = 93
MD = 838c0c84e0571d752852e9bf16cb661722de4beecab70333d6a6089aea71ddb043ab574e659a19d4590fa7503781264561c15d1dad124f9c216c4cd7d21deacb
COUNT = 94
MD = d4fe6b8e412a0ebe636b8b4ce33d82c19fcaa876edf4dcac41a2d57cb646778b114237b54a2d175a25904cee8a849640c0d3916398c35d91e50e55a976128fbc
COUNT = 95
MD = c0639a2abe0ae099f71832a4988c2b954ee71ff11b3f8f2c851991a929471f8e37bb3e94dda1cf6a4a461f50ce636ed0598588ec4eccab4eac1f1b7b4385183f
COUNT = 96
MD = e9464a1575c3463a8a50c1e61c18202726368fc52ec4b227669c3b2004b15bd990983cfe3243222f1ecfb7b353cc98d8f9413d6cd51b77855c7579853b9488a2
COUNT = 97
MD = 91315719df123fd441747d8f9fd9f22f592ccefddf8b3f3c39a90562b2ce6dcce6e55adc94b789297a9cd1584e0ff5ef1bdc80bce74af499714e4c75835f364e
COUNT = 98
MD = 0da355cf727cee3b34b1bd1e87870cde7075d4fdf1b1e689fd5dc172491e53ce7c3d2069596cd4c6db2b5975c3bd68ec09ee954c148ef56a7153399ca4f96dbc
COUNT = 99
MD = 760824a439b0681fcd5d22f8467d927a764febc457fd1eb62584ca82b00e1a07905a0117a955041892d2c9d849c096067ed2893aca5c841f8aa32dabe642bc82

+ 299
- 0
strobe/python/kat/SHA3_512ShortMsg.rsp View File

@@ -0,0 +1,299 @@
# CAVS 19.0
# "SHA3-512 ShortMsg" information for "SHA3AllBytes1-28-16"
# Length values represented in bits
# Generated on Thu Jan 28 13:32:47 2016
[L = 512]
Len = 0
Msg = 00
MD = a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26
Len = 8
Msg = e5
MD = 150240baf95fb36f8ccb87a19a41767e7aed95125075a2b2dbba6e565e1ce8575f2b042b62e29a04e9440314a821c6224182964d8b557b16a492b3806f4c39c1
Len = 16
Msg = ef26
MD = 809b4124d2b174731db14585c253194c8619a68294c8c48947879316fef249b1575da81ab72aad8fae08d24ece75ca1be46d0634143705d79d2f5177856a0437
Len = 24
Msg = 37d518
MD = 4aa96b1547e6402c0eee781acaa660797efe26ec00b4f2e0aec4a6d10688dd64cbd7f12b3b6c7f802e2096c041208b9289aec380d1a748fdfcd4128553d781e3
Len = 32
Msg = fc7b8cda
MD = 58a5422d6b15eb1f223ebe4f4a5281bc6824d1599d979f4c6fe45695ca89014260b859a2d46ebf75f51ff204927932c79270dd7aef975657bb48fe09d8ea008e
Len = 40
Msg = 4775c86b1c
MD = ce96da8bcd6bc9d81419f0dd3308e3ef541bc7b030eee1339cf8b3c4e8420cd303180f8da77037c8c1ae375cab81ee475710923b9519adbddedb36db0c199f70
Len = 48
Msg = 71a986d2f662
MD = def6aac2b08c98d56a0501a8cb93f5b47d6322daf99e03255457c303326395f765576930f8571d89c01e727cc79c2d4497f85c45691b554e20da810c2bc865ef
Len = 56
Msg = ec83d707a1414a
MD = 84fd3775bac5b87e550d03ec6fe4905cc60e851a4c33a61858d4e7d8a34d471f05008b9a1d63044445df5a9fce958cb012a6ac778ecf45104b0fcb979aa4692d
Len = 64
Msg = af53fa3ff8a3cfb2
MD = 03c2ac02de1765497a0a6af466fb64758e3283ed83d02c0edb3904fd3cf296442e790018d4bf4ce55bc869cebb4aa1a799afc9d987e776fef5dfe6628e24de97
Len = 72
Msg = 3d6093966950abd846
MD = 53e30da8b74ae76abf1f65761653ebfbe87882e9ea0ea564addd7cfd5a6524578ad6be014d7799799ef5e15c679582b791159add823b95c91e26de62dcb74cfa
Len = 80
Msg = 1ca984dcc913344370cf
MD = 6915ea0eeffb99b9b246a0e34daf3947852684c3d618260119a22835659e4f23d4eb66a15d0affb8e93771578f5e8f25b7a5f2a55f511fb8b96325ba2cd14816
Len = 88
Msg = fc7b8cdadebe48588f6851
MD = c8439bb1285120b3c43631a00a3b5ac0badb4113586a3dd4f7c66c5d81012f7412617b169fa6d70f8e0a19e5e258e99a0ed2dcfa774c864c62a010e9b90ca00d
Len = 96
Msg = ecb907adfb85f9154a3c23e8
MD = 94ae34fed2ef51a383fb853296e4b797e48e00cad27f094d2f411c400c4960ca4c610bf3dc40e94ecfd0c7a18e418877e182ca3ae5ca5136e2856a5531710f48
Len = 104
Msg = d91a9c324ece84b072d0753618
MD = fb1f06c4d1c0d066bdd850ab1a78b83296eba0ca423bb174d74283f46628e6095539214adfd82b462e8e9204a397a83c6842b721a32e8bb030927a568f3c29e6
Len = 112
Msg = c61a9188812ae73994bc0d6d4021
MD = 069e6ab1675fed8d44105f3b62bbf5b8ff7ae804098986879b11e0d7d9b1b4cb7bc47aeb74201f509ddc92e5633abd2cbe0ddca2480e9908afa632c8c8d5af2a
Len = 120
Msg = a6e7b218449840d134b566290dc896
MD = 3605a21ce00b289022193b70b535e6626f324739542978f5b307194fcf0a5988f542c0838a0443bb9bb8ff922a6a177fdbd12cf805f3ed809c48e9769c8bbd91
Len = 128
Msg = 054095ba531eec22113cc345e83795c7
MD = f3adf5ccf2830cd621958021ef998252f2b6bc4c135096839586d5064a2978154ea076c600a97364bce0e9aab43b7f1f2da93537089de950557674ae6251ca4d
Len = 136
Msg = 5b1ec1c4e920f5b995b6a788b6e989ac29
MD = 135eea17ca4785482c19cd668b8dd2913216903311fa21f6b670b9b573264f8875b5d3c071d92d63556549e523b2af1f1a508bd1f105d29a436f455cd2ca1604
Len = 144
Msg = 133b497b00932773a53ba9bf8e61d59f05f4
MD = 783964a1cf41d6d210a8d7c81ce6970aa62c9053cb89e15f88053957ecf607f42af08804e76f2fbdbb31809c9eefc60e233d6624367a3b9c30f8ee5f65be56ac
Len = 152
Msg = 88c050ea6b66b01256bda299f399398e1e3162
MD = 6bf7fc8e9014f35c4bde6a2c7ce1965d9c1793f25c141021cc1c697d111363b3854953c2b4009df41878b5558e78a9a9092c22b8baa0ed6baca005455c6cca70
Len = 160
Msg = d7d5363350709e96939e6b68b3bbdef6999ac8d9
MD = 7a46beca553fffa8021b0989f40a6563a8afb641e8133090bc034ab6763e96d7b7a0da4de3abd5a67d8085f7c28b21a24aefb359c37fac61d3a5374b4b1fb6bb
Len = 168
Msg = 54746a7ba28b5f263d2496bd0080d83520cd2dc503
MD = d77048df60e20d03d336bfa634bc9931c2d3c1e1065d3a07f14ae01a085fe7e7fe6a89dc4c7880f1038938aa8fcd99d2a782d1bbe5eec790858173c7830c87a2
Len = 176
Msg = 73df7885830633fc66c9eb16940b017e9c6f9f871978
MD = 0edee1ea019a5c004fd8ae9dc8c2dd38d4331abe2968e1e9e0c128d2506db981a307c0f19bc2e62487a92992af77588d3ab7854fe1b68302f796b9dcd9f336df
Len = 184
Msg = 14cb35fa933e49b0d0a400183cbbea099c44995fae1163
MD = af2ef4b0c01e381b4c382208b66ad95d759ec91e386e953984aa5f07774632d53b581eba32ed1d369c46b0a57fee64a02a0e5107c22f14f2227b1d11424becb5
Len = 192
Msg = 75a06869ca2a6ea857e26e78bb78a139a671ccb098d8205a
MD = 88be1934385522ae1d739666f395f1d7f99978d62883a261adf5d618d012dfab5224575634446876b86b3e5f7609d397d338a784b4311027b1024ddfd4995a0a
Len = 200
Msg = b413ab364dd410573b53f4c2f28982ca07061726e5d999f3c2
MD = 289e889b25f9f38facfccf3bdbceea06ef3baad6e9612b7232cd553f4884a7a642f6583a1a589d4dcb2dc771f1ff6d711b85f731145a89b100680f9a55dcbb3f
Len = 208
Msg = d7f9053984213ebabc842fd8ce483609a9af5dc140ecdbe63336
MD = f167cb30e4bacbdc5ed53bc615f8c9ea19ad4f6bd85ca0ff5fb1f1cbe5b576bda49276aa5814291a7e320f1d687b16ba8d7daab2b3d7e9af3cd9f84a1e9979a1
Len = 216
Msg = 9b7f9d11be48e786a11a472ab2344c57adf62f7c1d4e6d282074b6
MD = 82fa525d5efaa3cce39bffef8eee01afb52067097f8965cde71703345322645eae59dbaebed0805693104dfb0c5811c5828da9a75d812e5562615248c03ff880
Len = 224
Msg = 115784b1fccfabca457c4e27a24a7832280b7e7d6a123ffce5fdab72
MD = ec12c4ed5ae84808883c5351003f7e26e1eaf509c866b357f97472e5e19c84f99f16dbbb8bfff060d6c0fe0ca9c34a210c909b05f6a81f441627ce8e666f6dc7
Len = 232
Msg = c3b1ad16b2877def8d080477d8b59152fe5e84f3f3380d55182f36eb5f
MD = 4b9144edeeec28fd52ba4176a78e080e57782d2329b67d8ac8780bb6e8c2057583172af1d068922feaaff759be5a6ea548f5db51f4c34dfe7236ca09a67921c7
Len = 240
Msg = 4c66ca7a01129eaca1d99a08dd7226a5824b840d06d0059c60e97d291dc4
MD = 567c46f2f636223bd5ed3dc98c3f7a739b42898e70886f132eac43c2a6fadabe0dd9f1b6bc4a9365e5232295ac1ac34701b0fb181d2f7f07a79d033dd426d5a2
Len = 248
Msg = 481041c2f56662316ee85a10b98e103c8d48804f6f9502cf1b51cfa525cec1
MD = 46f0058abe678195b576df5c7eb8d739468cad1908f7953ea39c93fa1d96845c38a2934d23804864a8368dae38191d983053ccd045a9ab87ef2619e9dd50c8c1
Len = 256
Msg = 7c1688217b313278b9eae8edcf8aa4271614296d0c1e8916f9e0e940d28b88c5
MD = 627ba4de74d05bb6df8991112e4d373bfced37acde1304e0f664f29fa126cb497c8a1b717b9929120883ec8898968e4649013b760a2180a9dc0fc9b27f5b7f3b
Len = 264
Msg = 785f6513fcd92b674c450e85da22257b8e85bfa65e5d9b1b1ffc5c469ad337d1e3
MD = 5c11d6e4c5c5f76d26876c5976b6f555c255c785b2f28b6700ca2d8b3b3fa585636239277773330f4cf8c5d5203bcc091b8d47e7743bbc0b5a2c54444ee2acce
Len = 272
Msg = 34f4468e2d567b1e326c0942970efa32c5ca2e95d42c98eb5d3cab2889490ea16ee5
MD = 49adfa335e183c94b3160154d6698e318c8b5dd100b0227e3e34cabea1fe0f745326220f64263961349996bbe1aae9054de6406e8b350408ab0b9f656bb8daf7
Len = 280
Msg = 53a0121c8993b6f6eec921d2445035dd90654add1298c6727a2aed9b59bafb7dd62070
MD = 918b4d92e1fcb65a4c1fa0bd75c562ac9d83186bb2fbfae5c4784de31a14654546e107df0e79076b8687bb3841c83ba9181f9956cd43428ba72f603881b33a71
Len = 288
Msg = d30fa4b40c9f84ac9bcbb535e86989ec6d1bec9b1b22e9b0f97370ed0f0d566082899d96
MD = 39f104c1da4af314d6bceb34eca1dfe4e67484519eb76ba38e4701e113e6cbc0200df86e4439d674b0f42c72233360478ba5244384d28e388c87aaa817007c69
Len = 296
Msg = f34d100269aee3ead156895e8644d4749464d5921d6157dffcbbadf7a719aee35ae0fd4872
MD = 565a1dd9d49f8ddefb79a3c7a209f53f0bc9f5396269b1ce2a2b283a3cb45ee3ae652e4ca10b26ced7e5236227006c94a37553db1b6fe5c0c2eded756c896bb1
Len = 304
Msg = 12529769fe5191d3fce860f434ab1130ce389d340fca232cc50b7536e62ad617742e022ea38a
MD = daee10e815fff0f0985d208886e22f9bf20a3643eb9a29fda469b6a7dcd54b5213c851d6f19338d63688fe1f02936c5dae1b7c6d5906a13a9eeb934400b6fe8c
Len = 312
Msg = b2e3a0eb36bf16afb618bfd42a56789179147effecc684d8e39f037ec7b2d23f3f57f6d7a7d0bb
MD = 04029d6d9e8e394afa387f1d03ab6b8a0a6cbab4b6b3c86ef62f7142ab3c108388d42cb87258b9e6d36e5814d8a662657cf717b35a5708365e8ec0396ec5546b
Len = 320
Msg = 25c4a5f4a07f2b81e0533313664bf615c73257e6b2930e752fe5050e25ff02731fd2872f4f56f727
MD = ec2d38e5bb5d7b18438d5f2029c86d05a03510db0e66aa299c28635abd0988c58be203f04b7e0cc25451d18f2341cd46f8705d46c2066dafab30d90d63bf3d2c
Len = 328
Msg = 134bb8e7ea5ff9edb69e8f6bbd498eb4537580b7fba7ad31d0a09921237acd7d66f4da23480b9c1222
MD = 8f966aef96831a1499d63560b2578021ad970bf7557b8bf8078b3e12cefab122fe71b1212dc704f7094a40b36b71d3ad7ce2d30f72c1baa4d4bbccb3251198ac
Len = 336
Msg = f793256f039fad11af24cee4d223cd2a771598289995ab802b5930ba5c666a24188453dcd2f0842b8152
MD = 22c3d9712535153a3e206b1033929c0fd9d937c39ba13cf1a6544dfbd68ebc94867b15fda3f1d30b00bf47f2c4bf41dabdeaa5c397dae901c57db9cd77ddbcc0
Len = 344
Msg = 23cc7f9052d5e22e6712fab88e8dfaa928b6e015ca589c3b89cb745b756ca7c7634a503bf0228e71c28ee2
MD = 6ecf3ad6064218ee101a555d20fab6cbeb6b145b4eeb9c8c971fc7ce05581a34b3c52179590e8a134be2e88c7e549875f4ff89b96374c6995960de3a5098cced
Len = 352
Msg = a60b7b3df15b3f1b19db15d480388b0f3b00837369aa2cc7c3d7315775d7309a2d6f6d1371d9c875350dec0a
MD = 8d651605c6b32bf022ea06ce6306b2ca6b5ba2781af87ca2375860315c83ad88743030d148ed8d73194c461ec1e84c045fc914705747614c04c8865b51da94f7
Len = 360
Msg = 2745dd2f1b215ea509a912e5761cccc4f19fa93ba38445c528cb2f099de99ab9fac955baa211fd8539a671cdb6
MD = 4af918eb676ce278c730212ef79d818773a76a43c74d643f238e9b61acaf4030c617c4d6b3b7514c59b3e5e95d82e1e1e35443e851718b13b63e70b123d1b72c
Len = 368
Msg = 88adee4b46d2a109c36fcfb660f17f48062f7a74679fb07e86cad84f79fd57c86d426356ec8e68c65b3caa5bc7ba
MD = 6257acb9f589c919c93c0adc4e907fe011bef6018fbb18e618ba6fcc8cbc5e40641be589e86dbb0cf7d7d6bf33b98d8458cce0af7857f5a7c7647cf350e25af0
Len = 376
Msg = 7d40f2dc4af3cfa12b00d64940dc32a22d66d81cb628be2b8dda47ed6728020d55b695e75260f4ec18c6d74839086a
MD = 5c46c84a0a02d898ed5885ce99c47c77afd29ae015d027f2485d630f9b41d00b7c1f1faf6ce57a08b604b35021f7f79600381994b731bd8e6a5b010aeb90e1eb
Len = 384
Msg = 3689d8836af0dc132f85b212eb670b41ecf9d4aba141092a0a8eca2e6d5eb0ba4b7e61af9273624d14192df7388a8436
MD = 17355e61d66e40f750d0a9a8e8a88cd6f9bf6070b7efa76442698740b4487ea6c644d1654ef16a265204e03084a14cafdccf8ff298cd54c0b4009967b6dd47cc
Len = 392
Msg = 58ff23dee2298c2ca7146227789c1d4093551047192d862fc34c1112d13f1f744456cecc4d4a02410523b4b15e598df75a
MD = aca89aa547c46173b4b2a380ba980da6f9ac084f46ac9ddea5e4164aeef31a9955b814a45aec1d8ce340bd37680952c5d68226dda1cac2677f73c9fd9174fd13
Len = 400
Msg = 67f3f23df3bd8ebeb0096452fe4775fd9cc71fbb6e72fdcc7eb8094f42c903121d0817a927bcbabd3109d5a70420253deab2
MD = f4207cc565f266a245f29bf20b95b5d9a83e1bb68ad988edc91faa25f25286c8398bac7dd6628259bff98f28360f263dfc54c4228bc437c5691de1219b758d9f
Len = 408
Msg = a225070c2cb122c3354c74a254fc7b84061cba33005cab88c409fbd3738ff67ce23c41ebef46c7a61610f5b93fa92a5bda9569
MD = e815a9a4e4887be014635e97958341e0519314b3a3289e1835121b153b462272b0aca418be96d60e5ab355d3eb463697c0191eb522b60b8463d89f4c3f1bf142
Len = 416
Msg = 6aa0886777e99c9acd5f1db6e12bda59a807f92411ae99c9d490b5656acb4b115c57beb3c1807a1b029ad64be1f03e15bafd91ec
MD = 241f2ebaf7ad09e173b184244e69acd7ebc94774d0fa3902cbf267d4806063b044131bcf4af4cf180eb7bd4e7960ce5fe3dc6aebfc6b90eec461f414f79a67d9
Len = 424
Msg = 6a06092a3cd221ae86b286b31f326248270472c5ea510cb9064d6024d10efee7f59e98785d4f09da554e97cdec7b75429d788c112f
MD = d14a1a47f2bef9e0d4b3e90a6be9ab5893e1110b12db38d33ffb9a61e1661aecc4ea100839cfee58a1c5aff72915c14170dd99e13f71b0a5fc1985bf43415cb0
Len = 432
Msg = dfc3fa61f7fffc7c88ed90e51dfc39a4f288b50d58ac83385b58a3b2a3a39d729862c40fcaf9bc308f713a43eecb0b72bb9458d204ba
MD = 947bc873dc41df195f8045deb6ea1b840f633917e79c70a88d38b8862197dc2ab0cc6314e974fb5ba7e1703b22b1309e37bd430879056bdc166573075a9c5e04
Len = 440
Msg = 52958b1ff0049efa5d050ab381ec99732e554dcd03725da991a37a80bd4756cf65d367c54721e93f1e0a22f70d36e9f841336956d3c523
MD = 9cc5aad0f529f4bac491d733537b69c8ec700fe38ab423d815e0927c8657f9cb8f4207762d816ab697580122066bc2b68f4177335d0a6e9081540779e572c41f
Len = 448
Msg = 302fa84fdaa82081b1192b847b81ddea10a9f05a0f04138fd1da84a39ba5e18e18bc3cea062e6df92ff1ace89b3c5f55043130108abf631e
MD = 8c8eaae9a445643a37df34cfa6a7f09deccab2a222c421d2fc574bbc5641e504354391e81eb5130280b1226812556d474e951bb78dbdd9b77d19f647e2e7d7be
Len = 456
Msg = b82f500d6bc2dddcdc162d46cbfaa5ae64025d5c1cd72472dcd2c42161c9871ce329f94df445f0c8aceecafd0344f6317ecbb62f0ec2223a35
MD = 55c69d7accd179d5d9fcc522f794e7af5f0eec7198ffa39f80fb55b866c0857ff3e7aeef33e130d9c74ef90606ca821d20b7608b12e6e561f9e6c7122ace3db0
Len = 464
Msg = 86da9107ca3e16a2b58950e656a15c085b88033e79313e2c0f92f99f06fa187efba5b8fea08eb7145f8476304180dd280f36a072b7eac197f085
MD = 0d3b1a0459b4eca801e0737ff9ea4a12b9a483a73a8a92742a93c297b7149326bd92c1643c8177c8924482ab3bbd916c417580cc75d3d3ae096de531bc5dc355
Len = 472
Msg = 141a6eafe157053e780ac7a57b97990616ce1759ed132cb453bcdfcabdbb70b3767da4eb94125d9c2a8d6d20bfaeacc1ffbe49c4b1bb5da7e9b5c6
MD = bdbdd5b94cdc89466e7670c63ba6a55b58294e93b351261a5457bf5a40f1b5b2e0acc7fceb1bfb4c8872777eeeaff7927fd3635ca18c996d870bf86b12b89ba5
Len = 480
Msg = 6e0c65ee0943e34d9bbd27a8547690f2291f5a86d713c2be258e6ac16919fe9c4d491895d3a961bb97f5fac255891a0eaa18f80e1fa1ebcb639fcfc1
MD = 39ebb992b8d39daae973e3813a50e9e79a67d8458a6f17f97a6dd30dd7d11d95701a11129ffeaf7d45781b21cac0c4c034e389d7590df5beeb9805072d0183b9
Len = 488
Msg = 57780b1c79e67fc3beaabead4a67a8cc98b83fa7647eae50c8798b96a516597b448851e93d1a62a098c4767333fcf7b463ce91edde2f3ad0d98f70716d
MD = 3ef36c3effad6eb5ad2d0a67780f80d1b90efcb74db20410c2261a3ab0f784429df874814748dc1b6efaab3d06dd0a41ba54fce59b67d45838eaa4aa1fadfa0f
Len = 496
Msg = bcc9849da4091d0edfe908e7c3386b0cadadb2859829c9dfee3d8ecf9dec86196eb2ceb093c5551f7e9a4927faabcfaa7478f7c899cbef4727417738fc06
MD = 1fcd8a2c7b4fd98fcdc5fa665bab49bde3f9f556aa66b3646638f5a2d3806192f8a33145d8d0c535c85adff3cc0ea3c2715b33cec9f8886e9f4377b3632e9055
Len = 504
Msg = 05a32829642ed4808d6554d16b9b8023353ce65a935d126602970dba791623004dede90b52ac7f0d4335130a63cba68c656c139989614de20913e83db320db
MD = 49d8747bb53ddde6d1485965208670d1130bf35619d7506a2f2040d1129fcf0320207e5b36fea083e84ffc98755e691ad8bd5dc66f8972cb9857389344e11aad
Len = 512
Msg = 56ac4f6845a451dac3e8886f97f7024b64b1b1e9c5181c059b5755b9a6042be653a2a0d5d56a9e1e774be5c9312f48b4798019345beae2ffcc63554a3c69862e
MD = 5fde5c57a31febb98061f27e4506fa5c245506336ee90d595c91d791a5975c712b3ab9b3b5868f941db0aeb4c6d2837c4447442f8402e0e150a9dc0ef178dca8
Len = 520
Msg = 8a229f8d0294fe90d4cc8c875460d5d623f93287f905a999a2ab0f9a47046f78ef88b09445c671189c59388b3017cca2af8bdf59f8a6f04322b1701ec08624ab63
MD = 16b0fd239cc632842c443e1b92d286dd519cfc616a41f2456dd5cddebd10703c3e9cb669004b7f169bb4f99f350ec96904b0e8dd4de8e6be9953dc892c65099f
Len = 528
Msg = 87d6aa9979025b2437ea8159ea1d3e5d6f17f0a5b913b56970212f56de7884840c0da9a72865e1892aa780b8b8f5f57b46fc070b81ca5f00eee0470ace89b1e1466a
MD = d816acf1797decfe34f4cc49e52aa505cc59bd17fe69dc9543fad82e9cf96298183021f704054d3d06adde2bf54e82a090a57b239e88daa04cb76c4fc9127843
Len = 536
Msg = 0823616ab87e4904308628c2226e721bb4169b7d34e8744a0700b721e38fe05e3f813fe4075d4c1a936d3a33da20cfb3e3ac722e7df7865330b8f62a73d9119a1f2199
MD = e1da6be4403a4fd784c59be4e71c658a78bb8c5d7d571c5e816fbb3e218a4162f62de1c285f3779781cb5506e29c94e1b7c7d65af2aa71ea5c96d9585b5e45d5
Len = 544
Msg = 7d2d913c2460c09898b20366ae34775b1564f10edea49c073cebe41989bb93f38a533af1f425d3382f8aa40159b567358ee5a73b67df6d0dc09c1c92bf3f9a28124ab07f
MD = 3aa1e19a52b86cf414d977768bb535b7e5817117d436b4425ec8d775e8cb0e0b538072213884c7ff1bb9ca9984c82d65cb0115cc07332b0ea903e3b38650e88e
Len = 552
Msg = fca5f68fd2d3a52187b349a8d2726b608fccea7db42e906b8718e85a0ec654fac70f5a839a8d3ff90cfed7aeb5ea9b08f487fc84e1d9f7fb831dea254468a65ba18cc5a126
MD = 2c74f846ecc722ea4a1eb1162e231b6903291fffa95dd5e1d17dbc2c2be7dfe549a80dd34487d714130ddc9924aed904ad55f49c91c80ceb05c0c034dae0a0a4
Len = 560
Msg = 881ff70ca34a3e1a0e864fd2615ca2a0e63def254e688c37a20ef6297cb3ae4c76d746b5e3d6bb41bd0d05d7df3eeded74351f4eb0ac801abe6dc10ef9b635055ee1dfbf4144
MD = 9a10a7ce23c0497fe8783927f833232ae664f1e1b91302266b6ace25a9c253d1ecab1aaaa62f865469480b2145ed0e489ae3f3f9f7e6da27492c81b07e606fb6
Len = 568
Msg = b0de0430c200d74bf41ea0c92f8f28e11b68006a884e0d4b0d884533ee58b38a438cc1a75750b6434f467e2d0cd9aa4052ceb793291b93ef83fd5d8620456ce1aff2941b3605a4
MD = 9e9e469ca9226cd012f5c9cc39c96adc22f420030fcee305a0ed27974e3c802701603dac873ae4476e9c3d57e55524483fc01adaef87daa9e304078c59802757
Len = 576
Msg = 0ce9f8c3a990c268f34efd9befdb0f7c4ef8466cfdb01171f8de70dc5fefa92acbe93d29e2ac1a5c2979129f1ab08c0e77de7924ddf68a209cdfa0adc62f85c18637d9c6b33f4ff8
MD = b018a20fcf831dde290e4fb18c56342efe138472cbe142da6b77eea4fce52588c04c808eb32912faa345245a850346faec46c3a16d39bd2e1ddb1816bc57d2da

+ 408
- 0
strobe/python/kat/SHAKE128LongMsg.rsp
File diff suppressed because it is too large
View File


+ 411
- 0
strobe/python/kat/SHAKE128Monte.rsp View File

@@ -0,0 +1,411 @@
# CAVS 19.0
# "SHAKE128 Monte" information for "SHAKE3AllBytesGT"
# Length values represented in bits
# Generated on Thu Jan 28 14:46:46 2016
[Minimum Output Length (bits) = 128]
[Maximum Output Length (bits) = 1120]
Msg = c8b310cb97efa3855434998fa81c7674
COUNT = 0
Outputlen = 264
Output = fe8c476993b47b10c98303a04c6212dfb341426d748d3926140aee0a151fc80fa1
COUNT = 1
Outputlen = 840
Output = 0ed1e47c5a33592d182ccb6a28cac9b11d23d8038ddebbdd4ae6c584d7ec14269810b082a27655d073ac9bfda81650e18d972e5e96cf1b4279af91cf0bf61156ebf6f042fb70ba6f25be976880c257405e759e71790c5218d05985f5ffff05f9eb2da24053cb7df667
COUNT = 2
Outputlen = 368
Output = 14cea805075b2e0cb19e803b799dbbbcf4381d9517fb3d11c54ad32fd67d10c7f8f59e0cf2eaec82bb237e14c835
COUNT = 3
Outputlen = 376
Output = ca327eff3846112cedb5a31f7be9ef1f477179f91ccaa7e41ddb9807d96fa5bfc76760fe9b46ee0e95b3a4d8d68675
COUNT = 4
Outputlen = 560
Output = bf9120be98540f8a62d21a248ee75a67579c04ac707de67ad7b3ef3df62dd654101c535b7eb5e2977e1ece693b0e04c1935d3b649cd5220d0c84388ef300083021fd2455321b
COUNT = 5
Outputlen = 1024
Output = 6530bd1a4e3c3623fc0c074fe5b6e32c9feacdc3f3f6c55c0b4b66c04e09572a7ec5af994a38c6d4bcd490ae66848c02a8727b1d7a7e266d451bff67ebf5623542cc09b79227c76c3a8532d2d7dc076259967f38fadf46224c1ddd1886bc137b654f1bb25bea20e4c194db5833226ecb9a5dd330b6033fef880cf18ec93eb8ed
COUNT = 6
Outputlen = 544
Output = 500cc61cddd8f34619d290cee7e48ca7bd6cd8165a2b18b1b1dca8edb31698c8f83197abbbb5c83607c915a794e7ae5cfe08629e79631615ca3f1b1d283cafd0d4b0fb4c
COUNT = 7
Outputlen = 344
Output = 178d8c27013bf606fbda5b339b7a5e2f767a9ecefb8ebc9507368ef6f8094397e52a57b8a8c6ce884a9204
COUNT = 8
Outputlen = 168
Output = 7263f2f232dd9ab91f75365a427babca26e0713dee
COUNT = 9
Outputlen = 608
Output = 72372d4af041df78d083d93d55e164981b75e0b9922b14304345e4d1e454fc34c96eb03a70d3c04fb6e8c829f9fd5641043a24be92dc6b22541c0433c2e4de5c878c5f9edf30c25242bd7415
COUNT = 10
Outputlen = 312
Output = 2c6aca6bbf28e8cb11899d69d7cbff2b0c6a76a19f73e0ef57682dca182258856eb30d0cec1bf1
COUNT = 11
Outputlen = 1008
Output = 5139d71302f69513332ba58fd7228ffcddb21374f0b652c4df657293708ee2cd8fc2f5312b6be37fcd3b3a897109f0359163f80d20ff4c88e1d6673e64e47a072f855fbf4e97f91e9866b5ddabb7c25a50fbeb559e7e782b1a420af481c21fb86f04d02aeff0865eb4d6f605f59615c999dd7b3f74e7f71cf800053a2421
COUNT = 12
Outputlen = 976
Output = f01ea6e5f9f98812a059bbd2b6b07ac943e2a23106cb6e23ff32cf772ea8b86f85b6dd8e912110198b8a92e7f667d63a129c5ede6f5c8cfea72934bd5254075321eb7033a813ee310bccf53c449c435914cb6efa73fdabf0b88a96766a7dce2fdbfea245aedf1636264c2d3bb0f05b176eb1d4471cdb35ec7056
COUNT = 13
Outputlen = 520
Output = 81c7001b80e89dc86ec09c347e412ec2ef84b40702d518d4fef2db78f77e71f831e56750489c085dcee42284af28a391283cdbad1ea69ca4841e7b427ed96e97da
COUNT = 14
Outputlen = 448
Output = 4033ffcf7fb089ecd675dfc2356b6be9b1e856d924625a6744b0c1f3ffa7c64b8c42db22069205fc363112ab5038a9a836c88cf9875668be
COUNT = 15
Outputlen = 504
Output = b0926faa962ef736af020053af7ee9a322107b429bf33c66ea2887051736e41789d0b59e95637c804ff85ca9e99f44d550aab42bf5a2fafa354ab0e905d6ca
COUNT = 16
Outputlen = 880
Output = 761dd52e2702c7944401b64a064140f605bf91fe56d38d5dd87898526e0bc6a8ae8d2690a0aa79a9740f44a71c27d79c4636925d02cd4e20903b67a3a745de6e4c30c70a4d92a72bdc6d2e3896426fbecb624753c7f20ca2a8da05ae656467e81eb27a58d15708668985b3647ca8
COUNT = 17
Outputlen = 536
Output = a80b5e288c725c4077f28446e0303200fc2ca0ba30e99cb6ca65c5e0a21129dc783bd0b644fa03b49174d3efea4a50a1dad2cd61779eddad95ae95a43aee3d0bd0a123
COUNT = 18
Outputlen = 800
Output = 91dfe309794ea96b337e27302a6134227244ef1e3ec663803b03e3d9ff7f008a864fe3987f25ec9a8a13b1d81aed2353de69cdc919f373676149fe4dfcce9035cd609e0207bac6bfd167e936360e267f92ae2cba41941abba3e149987c923ca30d19a1c0
COUNT = 19
Outputlen = 840
Output = 368be5e3c9e92d50d5901678239fdd31ae374afd0dc653fccbde94d6c40ec047cdbb6f61a0ec762be56f75ae436a6621d80252d26a2405e759832e80f3ce4f6984b125be3a792a9a98aa5ab9e4262be6acbf276536ba886eea767f76ae8fca22b47b9990a4d91c6449
COUNT = 20
Outputlen = 328
Output = 252c93c1864f4f5daaa80f304093c09c83f53dadb45e25bae92541eb2e5e15bddc71c76caab1a5b7f0
COUNT = 21
Outputlen = 1032
Output = d67678c6c054e2a5498cd940955ef07b7ad01d9e79192ea8f37e400e15d69fa77c8e23113c73eccef42243a1e76d39a05af137a1b298a16d061d2716d2ed1ef5a0fce1516ee90d4eee85e60fefcaca564f9742b7a85e9f91018416b78a8d55628576a1f1d1edbd30464b2eab5a0d392cc2bbcc664aaa58184d53173b2b264783c0
COUNT = 22
Outputlen = 648
Output = 6126fc6dc4cd75d80b7861b9e3753762cc6d3ec10412f0701696aff857634926ac4750427ff63519a537bb38c29b36bc3d45a1136247e3b27605ca0fcff027d436957757af1200e1cf730a2ba696a54a49
COUNT = 23
Outputlen = 696
Output = cc55d15f90f6c541c4bf773a1d42c863b6f1e5abb9ca69892fee417053ebb4675cebd2c228c38dd52d2cf5f2fbcc1e768ee9271042bfe80ad86d93ece0b3c7e35af3ab578c58971b8fdee5d82293e146aca782d277746b
COUNT = 24
Outputlen = 888
Output = e49b1ed94730903de3c1b85a7a8470dfb1ba363a983d09821a7077184ff97278a6ee74a26b46fd853f2fab0bbf01acd51cf9616518241e21d5c7900f99bf8416f46e8b301823d3441c136e2e29d028fc9331b585cde6848313c5d68859b950e7ff9bc0163d34581ccffa53fb877375
COUNT = 25
Outputlen = 208
Output = d8548f12754a45331f2194eee685a7952cfa323cd94443125ec8
COUNT = 26
Outputlen = 264
Output = 2ce4cee237dfc8740d767ff033d419b8dfcc4698591a35c6ab0b04b4e77794480d
COUNT = 27
Outputlen = 1032
Output = 1119358a0df4adb72ffb21e3ba249d6ad1b67e981d8c3983f36a62029b1ae8cfdc2130a1d415237f13729411e4c2b4917f9185dc3c36e422fe2045b7a72bde676170ade97c1ee7236f55867fa81a4c064ac1554fa94ae7528f3d78ea187dccf31ed7e245cbbd614dd26461676434c56d42f6da60c4bbc1410faf29971abf81190e
COUNT = 28
Outputlen = 808
Output = be0b40aa0e5db2b8340266702af785a387dec6dfd59804fc01ac6a87e0ab6a76e16aff00a40c2fe3f84e8f6377d8d5e8dacbb808cb1a75a07787c54dde96ca4f530f738bcfbd8929acd6fd0f3800cc9943bd64eadc6bb436be927668a7e95ed776c549c8f1
COUNT = 29
Outputlen = 760
Output = 980cbbd06bd5b9084ec54e9d60a4fe045ce6c4328d8c7df2f11e0bab696e5ade1578cc3c5577ad8e5c333716e289a14aabf90768a2eba9e8d82ccec9d24eedf2af1db5e70c2085ab4354b0bfc009181c9c516dc6e7724d1b7b8cab00de4181
COUNT = 30
Outputlen = 728
Output = 840518823416e9d6acc4a3d5455f1058686b19746bece85cee1c354255374f04820853e5fd91664afbfc728108ee524c740facd49c6baf2d98e9346b1c61a7eed18705ceb341b173ea048cd92665f520ce08b3c9f4a41e80f6b3e9
COUNT = 31
Outputlen = 488
Output = 8cf145a87b3871e72e5df96ab4828ff10dcf6b4f4d2c3c95343d459ac54342ce26953b481aae7d96ef453117e6e9557988983ac06237e04f0a9c6587ce
COUNT = 32
Outputlen = 320
Output = 4e0ef3ab4b3c38e04c21d48bdf5fd462f3b6205f966e063ccbae972a8e776cd8cacc6289b9000f5b
COUNT = 33
Outputlen = 896
Output = 045794b6cdd903793f98ea2806cfd4e9f0f5df022541e43d512e73f18cd7b063cc1152448d2b9f45578a1d509249e0f9a60cac1861fd057c951e013b5fabad48ee0914f8672352a8760e618da180331c431b27a3ad825748a748df7244cbcc71678e836faf17b2f978bc10846a325ff7
COUNT = 34
Outputlen = 672
Output = c849b8637453a85fc7f37ea48903b9939c2272ab2bc41267b75495f3245d4a20199b197e48dcdd19ebac817705491e506f233c72bbae78cc616831d0e8bfd4c922adfd5c1b3cc97c5b486b2bb208ffbb7267e9c4
COUNT = 35
Outputlen = 712
Output = e0748a3ad408dc2604dae40b53a9ec7deac48ee08ba35b34d68bfe756a3d6ac55a4177dfebf99053d040d173ab4ca792aa5ad31381f774d9498c1f69cd57f094880d81ecbbb1ad412363c2cdab18b0e1d9fc844ea6f48af5b5
COUNT = 36
Outputlen = 1008
Output = 8dfd8654bc967507cc74b0d9c80d34ffa10d6d03159da90d07cf57e8668398b6a960812b348a7d530f6d619ee7affc9c267a21f27dc585f6e82748d4adc9585064fa7f8de6315b7bef50bfe11817fc39dc16f588c382c3fb95ad09b7b322c589696ef7713995092fe3e4e7b72521fa1bef0eb18c7291a2641db15d804dc8
COUNT = 37
Outputlen = 264
Output = 16429d36a04e4cb4705e573b7a08b7a4ad9ff2b1698b7374a82de165f120f7c0aa
COUNT = 38
Outputlen = 168
Output = 8fc70b7167ab93f382d47723b024cbb3f99c35e6a0
COUNT = 39
Outputlen = 560
Output = 21ceadbb53bfea15d0930d5e0dd6beb0621e9acac49f594538cb479f24c8d846e6d342a952ce97839554effac334592e0e00dd26b79cdd065e6dc96b4e020f2a352996e1406d
COUNT = 40
Outputlen = 480
Output = 65532acecf26a3bdbb54bccc7da46c3995d56e6396803f1541a28e900238167d422158b9a6556b3891ba15b9095a3f698afd84a6b5d635d0e18e8dae
COUNT = 41
Outputlen = 456
Output = d946383946c74be1912e95349dd9770592feb46d88885ed9a289c6ef51e9b4979e076b1c2264d6df79c138790494dc1b32b5ea898ad63ee9f5
COUNT = 42
Outputlen = 392
Output = 9b9ba7846ab557b3ce39aeccf0a2d9aef62620376ac274a59d8ccc695a1eada511e6e3d1d45323e7851a3fcfbf29b41803
COUNT = 43
Outputlen = 160
Output = f965fafe5e7374479a85633a10161b604b108cbf
COUNT = 44
Outputlen = 968
Output = d8a2eaf8397851cbc2eaa868651372db9aacbdd339052aaadab4d607c93e435e24219936d1fbaed84a7665cbbf2634a563429407f8dc4f652ff99f582118924fe5edbe4fc6093535ef06e07155ea88fd9d5a7ffce458b8e0a5e8fe214996a8070cd2628c29b15049afded1eef7d4ba095746da1c9555df429e
COUNT = 45
Outputlen = 864
Output = c9dad51fbf4b4e27d5f2bad589e866ed12dfee1b33fa7ea39742c008cd26fcc6a8281db514c197f28fb2c603b9d829ab3a64262dc959c7a5f4b14bcc37d60ede0dec898a06052f53d52b0c8d3e0da4a81f9c231697d23ffc18b464c80ab74745beec34ba36fb799b95ff049d
COUNT = 46
Outputlen = 824
Output = 3e0961b3fd6deaba332b913ac7421515320296dec8d549699ebbfc047f58cefc13353d20c733501d58123a0379feb8bc8311462bb15ada95291e5c83720eb7b3cf37ac333924e5e922e1101a47ba3bc34c8f8c029e2d0be6385a6ea601106c359dc44c363f0ccf
COUNT = 47
Outputlen = 624
Output = 7ce881cff6edf8b5a3e68c4cc1b1815d83200d3a96bd3d3cdd2c70711e95f7a706800deb7ebf1016b196da3d7681272d738997d113ba7a0507b8f365719713309fdb864526794485ffd1a8551769
COUNT = 48
Outputlen = 1000
Output = 0f51ef367ee5cff809e09599708ed7e8399fa44a16d4865f788b9a28f7f381b6c5ebe5c3a4ae60d861d73363e6decb9cc7fdbfe17a6fa3b692b9a1466ce87098734f6d4c1844f0904ba16e0efa04038c4a9fb76d8699ff28e4338b4fcbe2906c47f47e9e494d2a26f1422b3cb03b8bc3fd2aa6f002fd6701146938fed3
COUNT = 49
Outputlen = 712
Output = 81f824d03d7f86c115978061d17a9244504a09579ab8675ae66fe286fde5a4d96ddf90000a53145df10c8daa16a69af5580e196fab8fcdc13078496894f1c40e1448929edea1282317ff6777f3d1097b2627052b521347d28a
COUNT = 50
Outputlen = 1024
Output = bc93eeb88b154a89b89dd8f9e7c793da820a713fa89442078b9e9788809637fb43226dda5dc9eb12921ada49ab03876c41124d02d616d3fb5f22dc830418d9c82d3b5a7017225ebb2c0fddb082b97ca1e06c767f5efec55effcd2c98830013e1343c8376ee21cf380a553f6fbefaa3ef00b82fe68250e1dec714decdbf6f35b0
COUNT = 51
Outputlen = 224
Output = cdd27be61aa461351a56c57db6efacad8f4383b6270622a015efb914
COUNT = 52
Outputlen = 624
Output = 3adcf56a7951205647146979b7498e7e064d50b8242a69867976f20fdacef1dc6bd28e18f2a1444b2d7c8020f8f8af8724a7189ac2ceecef743c49a7f50db7bab8d2f4295e494477aae851206b72
COUNT = 53
Outputlen = 704
Output = f698a3e48f9a66db783ff1d4e9c65010512076eba543bcdc8edf0d8afe8bcc7dee1943ea5140a93102937c86d3092a52c1e17d06f70e812084bd1fa9b670bfb2b31769cf2ca92090c1aeffe15a4f8bc58e20cad213bb8a27
COUNT = 54
Outputlen = 960
Output = 3b07587365d41efbd5834b723684edb9bbc6175c169e51f841636c3d1324e636d018e96b48e2be926558507a54eb74533ad73190a982e4bbbfe09bb7baf8dff971e09fb767208eefdea1cfb3be1c04c67f28e49a961434d691f92847b348171118c3884579050c6cfaf7cdeac6b3ad5827e597677a18d0ce
COUNT = 55
Outputlen = 1080
Output = cb309f64dc16bb6f563f3dd420c0d02bebce32b2f6cf4c7fbb0addf810aa6c345333b22f1bda7c01efb3db63826915054997980dc5326a994fd2c967738ce4e8f28af1c8ec6853691980184bb57465ac2670b3f16a21ad66ae842f9ab4e83420de2aa75eba227769d923f4ce2ab5eb65137a0ed59d27334456a7c74dd416e095b77e927204d65f
COUNT = 56
Outputlen = 864
Output = 364ec626d1560854e54434ea22548bd4efa79838f903c0009bc3ea098d93cdb28f8aca840946b103c27e5ba1593ea2a8459a76955006cd3f84cf80fddba64e1d208bdfa2a53c6243b0f8e32ad117058ec53794e39574f4c260d1b1ee47b2a4d516ffecf694a925bffab8b119
COUNT = 57
Outputlen = 880
Output = adf732795a7f5b85c5ebb791eb10a4f79ed7655d03bf0663618471a4a0f3377ed115b210c9bb7c3190e72bca59aa10dfb9cdc808a34207f69c2db269f4346e9a22b20eaba59899d816fbd813708f1d6f85cb4994abad67e8a4263f75330400feca6a1b56b355f7cc12e2aaf87b7c
COUNT = 58
Outputlen = 232
Output = 918188cded827eca594944dd8286330ae82be9ceebdcb5fdcc50a4d45e
COUNT = 59
Outputlen = 904
Output = 17397982d8cc32cac0e81f83a150365fd2f18ddf89d2a6e0cd9fbf4bd00e880a781dcb547187c70c2fe189cc432aad8f21535742820b37246bdf1c7b21c7fb1fbabb4a8c95eaf8c092de59848da7252762cfadae1508d2ecbab7545e11214101068ac0c7a4915ef3b46331f7d531fe6358
COUNT = 60
Outputlen = 1104
Output = fe1df64d14f06ed93de5c0093951b0d02e21c9cd9889bad46a5e7d9bf206530c9662ccfee2122e06c4bc850395d02327eecb8d91481885f4098c3567693b3e7312f15d7058a4746e5075bed4b83138f2cbd9fbe0cb482858e58cbfcf09ec44a7b6411fb87f036a11c2773e453cea900460a4d20feeb20ebbb7e39617ef6898ea96e86893d857f68b07da
COUNT = 61
Outputlen = 416
Output = 167ced28656a17446b9838ff76ae12bfa3b201e67620b521c2adf7ce90f0354f5de8b09c7c7940e926863b166455fc2dcda14b51
COUNT = 62
Outputlen = 880
Output = 7ec87344b0b7c75dc27ab5f71bba09b6952c74cdca5bdfd26133e6bfa93ca91284e6cf172070e85bf726fdb5f1b86d0c94cd14a851daddd3b4f1b003de2459210db459c60d88c5c64798b0205373f95ca705d60eb2449d1204953b21197f21e952915a2a5cc26f0c44f853d40096
COUNT = 63
Outputlen = 1032
Output = e80d762eb93af03b44d3fe16dc71e8f20a6adeb6602385c6ee1d5f18e741f0e22462536d9a18e607d12c763fd6d9d03d38454fc087a12426d228bba90b585b86583c1b07004df652e7617f0a2bf040470f47bcf66e076433a2d987f4d18a5ca2839f0b2a699a017fea3d6f97f68197c6c33a06bac49d16da062c396b6d3d51bc8b
COUNT = 64
Outputlen = 720
Output = 59e4debd17261441951d4073dd0d7e6786d9814b72c82de3243f6a502b63e4db187f91a19c405795931248ed088feaeb5541615e8ddcc8c0f71c864367e4ff8b03f6e42462e8b87020fd8f5773063d152db5a60982c8c619495e
COUNT = 65
Outputlen = 904
Output = a10edaca106aacd9f70b54695a9854a30cd917f3f2fc00f61c12bb37cd64140cc6531d3d9b59e27c3a0b5bc2fbace8312b1eca0c54699ffe2a7f8907fc70571f82b7a75da70101bb14196288b3d8c45a608010180de7e45acad8d157d15d1c9b745b974ac6068b68b413cef33afcfb50cb
COUNT = 66
Outputlen = 664
Output = 72e2bf2fecb8c6ba735ded52ba98197869685d900ff5063db8bb37a26b4caa36fe9595745b8d2693acfffb9dabaf53190706f9648a47916c305fcdb5c364a82809e5d2695dfb1071747d599394d74a40ede51f
COUNT = 67
Outputlen = 232
Output = c2f7dc0bc872b48995c1a88902ebbba0a1443c1da023d8f4de0e63a70a
COUNT = 68
Outputlen = 552
Output = 7058a40b38a9c6884ead602dc8fac1fe852ea087123981ab3f6ce1975ef07010a439739bcd0f5cf7b9e3d294eabde3bb6a335818a7e1c6f750f22da31255b5eea644cb3aa2
COUNT = 69
Outputlen = 208
Output = 31f65963affbbbd8b812ca49e6cb238e35b236b52fd843559dd4
COUNT = 70
Outputlen = 696
Output = e08c6d81ebd871d4302119c598cc341168552ed6e75e18b8db717af8c131b73e2382b4792101b58ed462a4dd6d492e60b1025ca52fc2875b5388ad5bf02d52e32f6f68154729b6f6c17910b00fd9496bdee0f6bb4e8549
COUNT = 71
Outputlen = 416
Output = 7276cfc416aa60ac21146f211f4d267e5d58b36a361220e2fa1228adf2b404d341a38ae43e624b7eecbcadf8ec96478d925aed91
COUNT = 72
Outputlen = 288
Output = cecb1c369a1818b7ace4aec9a15eb5b5763309849f9e55c4627c501d754ecaef09f33590
COUNT = 73
Outputlen = 768
Output = ba2202637b3980c33a364d7d80344ee58db3e76fd287218a56e35662c613fa97b319ca68ce36c05a9390b0177d6ff647f85a7825a1bfe01be58b730fc1ec8972d901198bbb3bc94590aeba101ff2477030844a7b5d2ab9389d6c847f164fce3e
COUNT = 74
Outputlen = 432
Output = d9d396c9752c48ae83e918f3264c1f9694db7068a050a9af717929ce8cc53d16da2ff0bb7d7b138d7d88b15a2a568446f3cb63e8afba
COUNT = 75
Outputlen = 1024
Output = 12eeb3c1da7d63d528a76b979b5e1c918906012ea770bf2622ad45b37dfb5cc3c05ca60b6740fb839e4feea593c94772f81ee5049e75025d12562980767884467a222934f89ffbbdd6e94c76063fac898a4479652372001f284f3cf3b98c21a8e8205a02b8f09f8c37ebecf31851570b01d37e5e76ba27c02aacb145bcac0e29
COUNT = 76
Outputlen = 992
Output = 171f7568a7299722bfb6e8a0eacb51d447c524c81488d8aedbcdefa051263782bad57b7faaa67936a24dd6726217d67a88dd091324411bd7902f6254c1970b4cdcc4467f22baf077a5d0945611168118be4c3b31abe33f95eb83aedbe54708502390af6bf3dda78d4eefc07ad786a1c15541105bc29a3f1ee1262592
COUNT = 77
Outputlen = 392
Output = 96b6a9f2913dfa8360439cac9ae1bab1bcc2c583091fad05a560f6d0ec474715ba84262421852595cb9ebd9f1bf3e44389
COUNT = 78
Outputlen = 616
Output = 339a38233c65a4c884dac2e8a710cf5bf817559d1e90e65108e04f026576a871ab1f13279aceb8fe0bc80b7ffb90164696d52d8cb62f4044ea3394b2d26b9cf9ab60cb17c0947f02a6baf791f3
COUNT = 79
Outputlen = 784
Output = cc3774830d882e830db810804f3d7ea6a52af98156639ae7de220b2fc01e383953d08d147a3ea935a6e5d23396f96233c58f6172804b3bae13bad3af51aa54c13e0b08269af886d6b5a5a36e3212127f7fb2bcfcf6d96e6c1efe220480fe142a8894
COUNT = 80
Outputlen = 1000
Output = a95ff9230b5009196d0270adc52ba3d97bc9c12aeb32957d188165948dfdccdde13dbc9e82ebf8e110af98634c28fffe29b75ea299bd0a4a3273fdcf4bf254a72fc149649c429ea30048b320826cc1300bc487f97dcb99e9010549f59c282096eccfd61114d564e30e72fd4322ff48d4b8c35af8d9d75b0f8ec6dff4ea
COUNT = 81
Outputlen = 648
Output = 212a7649eff0124185a3ce872910f72de526a040d964ff6902fc97ba6b47e3a64f3d1b36eac8e3fb524a8ab27350c36d6d7a4921487e36dd03b8ba62ce379a5e80cedda298233a129d3516d3462da98935
COUNT = 82
Outputlen = 384
Output = e860ab79867aa4343d782b1231d19ab2d0dda13887247546385cf6671b02f6e4138c0268c87205b63cec4677ed362965
COUNT = 83
Outputlen = 232
Output = a2e7d460ff56bcc039b90676637c769ff1eb497c4c0926f3622b911d11
COUNT = 84
Outputlen = 448
Output = 73814b8ff44c594af3557c715e00d9af6abfd2d1c78ac25888b990d386b6be9f42f0b9280b97761900cc8c93cee9ade27ba910cc0b0dadc5
COUNT = 85
Outputlen = 592
Output = d48da0f5a3849076439eeee954c4b524983ae2d37fd2f0feb02654180f16f3f3ffede947839d7f346c01ebe5fd88354f97fe701b8ccd91e0c9e4ae9fec5e15eb864f75f95113931cd75e
COUNT = 86
Outputlen = 936
Output = 7e46a140f1edd56ca8549527827862784b697ebf49139dc9da7bd7ddd506d633ac63b01cbdd48bdaa72cdd9bcf6dbe2e3677721a470b828ee78c271b75165bb684787e46e89444244ab2b546fd01fc6cf2952df56dcd9d2b7177a2934ccc747ba0f1c9ab3a30af46a4512750c9e79a21b1f0b28b2a
COUNT = 87
Outputlen = 768
Output = b5f5ba5b5d5f2db0ad65839e7f4ba9d781accbc15a4f33cf51a6ee30a7cabe93a24bc54b1a8d85198373baf01cceea8f4168f86edaab3f699ad2341cc03038d87942bdc2fc2e56e9bb11f4d646ea6e992540a01df081a8791a21bbfa66691111
COUNT = 88
Outputlen = 896
Output = 66ddbec9e0e38f2fa85f762e06f4bcbf9ddff9e8ba6bbcfd3da14291409c56dcc617f5cd6bd651856e380f1f35c32e1f9c65d765d320324492daf68dada4b9dfd24ac209f4c939615dbb3bf8924d4bd46d74f1242f5e4b9663a46928c15f242bc09674336c91a5669030fb92601b5bc5
COUNT = 89
Outputlen = 360
Output = 91825f0624dee4a5812547dce58306785091cb42d6e1eee150eb8587fd2addc7db99ee7ff0cb3e9353f7c648b6
COUNT = 90
Outputlen = 512
Output = 7109aa3f7afe025129ea29dff5835cc10d9a5339f7acfb3d1b98170194171f1709f9c3926dfcaf2bf90ea83686c7cac3ddd69307469e7fadf875eb0eaa953b88
COUNT = 91
Outputlen = 280
Output = 0201a61f8314a69576bf1d5a583278924bceb59ec66d4815976a070ce7002176b88710
COUNT = 92
Outputlen = 256
Output = 86f2159f9e6558d70eff6ff44cdcf40726d495ded115a6fb712f8d6bc496b796
COUNT = 93
Outputlen = 608
Output = 8cdb9d29a31bbf13a76acbb4c551b5981bfdba7181a6559c0a93e6d3ad31c52fce495fb3752a19d35a40121d67efd1a11972f1ae56efc8e2f7da050879f72ebe6cacdb9896e3aaeeda511689
COUNT = 94
Outputlen = 984
Output = 8e99bf7375a1c4f9fdd9595c961373a60d4c11e41da3040d2363f22ee66b896b92bd51689f8dd472eb16c4c6e49d4d61e89f9bb4bc22c724c4d362a1668f2279656aa73d6cf99322722b2d1d2ac49b231e2a1ac858ee67a57f0c18676b41560ce23b906db61c3724e971b4f0e895f0297673cfb4199f5585b94545
COUNT = 95
Outputlen = 976
Output = eb5f8b138fab3e16e257611f7269e885073fe093f5331fb4c15c21730eb71443c087effe49ba6cfd2e79b84c908c8db41c5acaf6feb28056381c2931cd0e1ce2c6fa400ff40550bf36bc0ecec61f5abf6e5a6c2ac1735cf4d380f05badca2284a43a5632b8c063e68fb0e50346a6b661f84b2224f91dc12617d6
COUNT = 96
Outputlen = 152
Output = 853959704ad7595e55dbd177b9abf211817f63
COUNT = 97
Outputlen = 176
Output = 247e924680494f4b9bd87c9a47ba5f19cc473351b8b8
COUNT = 98
Outputlen = 592
Output = d7f31c9ddbfd3428e6a1b76d18cf7bd4c80594b426bfcdd7d518d3ac972ea5ec2ae63b8abb74b765c971d186589f3788e22f1baa5399a48a59d75210ea69b9ac63aef68f61aa9814719a
COUNT = 99
Outputlen = 336
Output = 4aa371f0099b04a909f9b1680e8b52a21c6510ea2640137d501ffa114bf84717b1f725d64bae4ae5d87a

+ 1356
- 0
strobe/python/kat/SHAKE128ShortMsg.rsp
File diff suppressed because it is too large
View File


+ 5639
- 0
strobe/python/kat/SHAKE128VariableOut.rsp
File diff suppressed because it is too large
View File


+ 408
- 0
strobe/python/kat/SHAKE256LongMsg.rsp
File diff suppressed because it is too large
View File


+ 411
- 0
strobe/python/kat/SHAKE256Monte.rsp View File

@@ -0,0 +1,411 @@
# CAVS 19.0
# "SHAKE256 Monte" information for "SHAKE3AllBytesGT"
# Length values represented in bits
# Generated on Thu Jan 28 14:46:47 2016
[Minimum Output Length (bits) = 16]
[Maximum Output Length (bits) = 2000]
Msg = 48a0321b3653e4e86446d00f6a036efd
COUNT = 0
Outputlen = 1880
Output = 5410fae0cd08b96ac832890a2f4caa8b3d404e9f71e5ced4f3ef34f15c5aeb7b4c69ab3526dbe59118d5db5eb90f11a0e7f0aa5e10f648dace0e043732f6e948c8cf02af090107e3f9e8e07be835d0cdce6343248df67c669a36c6d3d0dcbbbb7b135e1751f0ed01f275840e0c20309d77ac802bbb0bf991373e7560ceb7d332bfad7ae827c97233fb79b66f01619759e2c7dab42a2ef3dfdda8a18fe4a4047de51279f513b318e7765b52f71575df51e6720936f68d9e4cd8342a8aafdd82d47a2f08de05956a5d97c6e72d2c77b74f5a3cc6d68c3549206c8485fc87b408e19ebbb7f9c0027a492120bc
COUNT = 1
Outputlen = 88
Output = c5e5196c3ab04ecc27892a
COUNT = 2
Outputlen = 1944
Output = f8060c419a1e4485cdb5609422f5458301930135113255b8abab7642a651b1eac08aee851dbac8fe3d524b790c9f253e5b77febebeddd7ebf6a9846a44b061300179d25d9857ab0d905e690effb90828dc91175587ea9cdcbefe95e1956027f3ab67d458434e9f56f82dcf66ae2c7a3fe9d9181da2863bcf4da6bf22f2e2be0c0462acd91884f5afa6d9543c56796231170792c1a1b59328159fc6641b8eb5863cd4c75889641d739faa25c2b398dadb4851dd6f1a8b75586740ac6f729dc23ab352b37a16ad1d37ecab7f7e43e2110c42582b8549b2d9c7482027b07d243dfc11a3725700e46c14aec76323ffcfd0a2dafe94
COUNT = 3
Outputlen = 1392
Output = 0e10ab21963f355088414d490def71baa424010d2712b8290628c5c4e0e0295750c9ed7d949e4f74f539217fdb0add00b07766af2f6e513165501f828bbf1aa078a207fc69ae5bfbba8c610fc87fbc47c5523e8e10bfe19c5baaf0e6567560521c8fbd54df2a1bc532a6baa43fc94150e0d486d5d9544f9b88f60d031c0b851ceaaa4eea237dee0313ab3477d299c29a711e3aa311f9be57c196d94591a8ef1a8cd6a7bab8e55c42b21d929e10cf
COUNT = 4
Outputlen = 1232
Output = 38e5deee858c8113497055a078312ff0cc3799bae73c8da78b1ae7efbbdc943167ff55aa8971c1aaa62e863ddcb868853ba135046ab56c19ac6342b070ad350c11d0ddabefc37b3b78a0b9a0faddb8cfc18ba86c08c7602a094386a95f385fa97e5804f09e176c2bc3830e2683426cd2b24ea052f079f33d635d7feefdf216f8527d5864cf8f53d8b2360b897e0ad196db23e9982b1276cbdbd0
COUNT = 5
Outputlen = 672
Output = aed2d53614e6aef1fa0d8b0c868c8e74573116e69b438ff3391171b5ea282cea2f16bf8710cc49ac31c1bf08baac6ccf2c958f1d6483df2bd1a86632f6658c22818108d4f83c23d9b9a282353a89479cd4ac3963
COUNT = 6
Outputlen = 1896
Output = 909112fd7352c3c9206236b6a35a5d008c6afa20f3c6cfd60261afeb8680fa12bc21b8c218ccc7583bc0598b10fcb63b16ea4d1f72f53300950ce36cea3d90e70e66e45b7c23c82d0f86aa464d4cfb0c53d44cf54d33d3ece8beb324d0050636a4efec3f2877be13ceeedb918f8c2d44951af609aada60e91c0705329b6d07953c2b52d8122cb13e9b82c79ad24dc89963e17c27afda3256fffd8062935346af2aa00497f25c3bbfb658e1526e61290c2b4ddc541785d97f3e7343db162280c5a7bc459ba4f3168d30e5b23e7b4df749f7e88c56eaf29076a572b3ac9b58d6da3ab08f48580f1cf6b3fc395bed
COUNT = 7
Outputlen = 736
Output = e6d20a4803b06267bfdac41a8329833a3f7daa2e5e1dd926f6b4a87eb289eba20971d4c36636f77d445b4549e61d049764252addc7d6a176812ecab4fe83bf2d5d917b5b10ac75e5b14012ebe808fd25ac2eb62b843fdfcde43bb41d
COUNT = 8
Outputlen = 568
Output = b9fc4262a74a41a7a2b8ce6f0460168ff9c00b41035b68de0a5204d59321e156094dd6e541f852b7836c0d5f204c72881f335f0684b2d0d1fe828ce3bc25823b9dbb90da4b6a5e
COUNT = 9
Outputlen = 1304
Output = dc9f4de31261721f84f71dda1a5e59d9ee2d8c9d18d8f323a128bfc482e0e3c1384fe0a53cc576e373efafd4f8a2950e6843f763b2d087c2f2b3f389fb28ae50e5c630399f88f3e3f77ef0ac698dcfaef0c67aae5dee35af1a4118dca0ea62eea3a0ad1fab6dd51169af6d2aee52e5710171fc410e827aaf8179978803f5126defb07c5dae2f7d1e07a799896f3dcbf9845fcd415edaade887fc13ed30537c512e84de
COUNT = 10
Outputlen = 1304
Output = e899897842c3333a64ece6f309cacb105692d087fd0544b6e9adae07ed7e0cbe2f38080cfa364a59db46448175a06a33a08db9fba19791a56c7101c4f7625d5434668755941be20e841ee267f4d7ab5074620451f2105782b72781feef259943bc959a1884b3b69c2ff13cb450bbbc78359f58a6efa76e1b210a551524cf9ca598b03d4de87dd5bcca1f4a901989ffb55aa11f168019ef40e877bfc635d0261e5d3045
COUNT = 11
Outputlen = 1560
Output = af476f42cc65bf9c074ad733f5699e8bc830664f8e961fef43bfe5aa3f73a587a21306f19caf929e9d19bec8cdac2c9532933d9f93119f2f11b683fcf317eebdfcdcfe116cf4c91cf865dd34ef5b4a6fc76d14da41b937d55e57a8a228e96d157483577ab6b736cb2e6f15a7c7b199756e1a504a42dc55002a46d863b8af18257bcd126a8d6035cc75092af61133eb6ecba84dec6f584bd6f13b7255004fbf66eab11e09b1d31f311ec956f51b94d47b8d45e5c79fa2b0c8fc96c654ffd2c94bcb4dbc
COUNT = 12
Outputlen = 1240
Output = e70ad186b79360b35722ae6486021cba3f919f1d102517bb19c10e9e10a792b186c6e74a5abdfa0cecbbecf756f23a655ec0ca6615678ace8f23b5021e4c27e0343a5288534c81cdb7d2370381ca6fda17766263d0d318c363d2be380293875473c04c4e9c6f30591ba6af2fadfdb8b0c2806502cb9f4ee20781cf9173930784818a49a770c9e46d8f360e3c2b5ae764e35c9df8110ef940ccd722
COUNT = 13
Outputlen = 1032
Output = 5eea9e63f17ba71f816338fcff5421b8ddc0f9650eea81e7b7c1e13643995e5f2593aeef4b736084e1651e23ccf4bbd02707e2459354528e5dc27b7e2c61676878fb17dc3ee74df1dc8eab2e375e5e657ebd5c765ae2269c6f10603868b030d0234fe3890dde01e09d6629a95cdcf1793941e3fbfe379e40955750e9d7fd2e18d6
COUNT = 14
Outputlen = 488
Output = 8a67bdbcfbc701bc4f2cf877a9f1449c4cae31f74b8b02d9b1e6d2cac0d53f45ada5ca9d6a64e379386f92d4b902c755c2cab1aa05da658f54b03a1ce7
COUNT = 15
Outputlen = 1872
Output = 0224fbd36d4a39e67f1439ab7cb45031338e78facfca780f1a79ee976c83842105845368111394dfa9f44435a0d93c294ac6452a83e9ca3f80d87fa15a807dc4e7e1db1607b9cc67afe6e50cdc1536f94c2989df9470768fbe1b68c485ecaa20e15ace299f437edfd783a41f94dfb100e1ec3c4ebd68ccb9c7548a36a5fbcea1550f92a9917728095f1b72e92cfc7e9696494f8eb423e9e4a26d361be8985d077ed210fddf33d0a39e507d04a5152d62894ef88ff0f943936c617bc0b223003616b95509b18edc45547fc156febf124d8137b5a994620e46ac5b04300503a0f7891c5650047570205311
COUNT = 16
Outputlen = 1272
Output = 7e265aa3a22aacbb42e61d48f87154ac6167b36137bc938fa8afca762addbb843bbbbce7ae29081cfdefbd67c7c34efe8c4c818c55350eceaabc7b2c44b56fe32ef692c65d1f0a10284eedd8ea8a451294575f8319cb41907e98c721a5befc602a692079c34d06ce0b472ddf23baab7aa17ac080f3f2be890098739a54b3dadbaa308a53d0207bdb76973f3f7e3501bdd522646929c7eaea90de10d69bd87d
COUNT = 17
Outputlen = 296
Output = d27bcaeb8722264ae65d590496cd4fa4bfb8bfbe7c23ddb47f5016bef76fd68ce4971c04a5
COUNT = 18
Outputlen = 368
Output = b358148ccb40476ef0f673c28c52cb5873d366f9824b41b57d055249a28298703f7b99452a61931157fe4ae777ec
COUNT = 19
Outputlen = 120
Output = ce41fb641dfdda66e7bc30b287e4b4
COUNT = 20
Outputlen = 1440
Output = 133a550599987a693cd0065563f31653e6c9f63027cf2833e5594ac696249b6a103754e299326a3d10b33ab397cc83ff2d6944b335a48a8fd7b4694779beee2a9e4c24cf5b53b1e7e69b1112a866d1d1e9941dff6956bf934a78ef263927fd4e03d79f749f37dcf5dd6ea91bd9b786709aff781b3656adceb2615720700ce1bf42f0e9204fa66371dd0f2ea073f3bd767309ca2df59d9d0349cae6d45ce43918d77d4b51f541bc700f4c59214494bd1e9e0eca69
COUNT = 21
Outputlen = 216
Output = 91c3792c6e035f93c031fd3303f4ed67df2647d9b2abb75e4c4646
COUNT = 22
Outputlen = 632
Output = d4e6cd7b44d9032c5d5296937af40bd409e4ec368c385f6d06aa3d49b2ca192beb8bf925d70e3236bf55056725976bb78e5da0fa0c57c94a842b618bb7d30973fb088dd14e999730c6e466b13c3259
COUNT = 23
Outputlen = 1232
Output = 910812965a85e0fa9c7473b575e11327133a0979397ffec1d6a9a7ee0aebf1e3085fbe6d23f18850968fab590cb52f3aa5dd8b9a8b0afe0fa8df78066585a6a8f6e5eb470e0636087902669a59360d187fce49c0845b7619ca73012f2cdb84b6b653e6f53f0d1cdbd25d9d0579f721651cf629dd0f8653d26d1dd17b816b4ef15202103767e112e0549bf533636f4c33748fc6c8f16bd1e39059
COUNT = 24
Outputlen = 856
Output = 44c115b9b5c376b3b148ec53d03647334146e0dfef8bd0fefd8818152ff8dc2b705f0f10643d91ad3759a08656b41fb142b6c4432582ff9d3d1a44aa0048f5825d92c942ab28ef415c2e5e7547c5eb127c3da91326c922d59708758a8e5bc807320ea6f62d7248f3943235
COUNT = 25
Outputlen = 408
Output = 90d91938641f5d827e00b8cce18b24ed09a0cb946a4b52a2c47d20454c640b89f5b1379b8aaa46f3097a17470ef4f244dbff60
COUNT = 26
Outputlen = 1112
Output = 9f258b52c0b685b6c4f09d4fdb527ddbe04378a8589a12b1a5f11067f598c3a193986cb60dbf0732bcd49cb10f5f38e52255ed99577f45e7ed5ae4fd2027ceb5e3566e46894d86f78dee54c17494effb44aebae912a1b057f8c1205dd97871c191448f4d9ff9100da83e5841adb07297e8a72282764c217ab0a1c43cce01e2825bae302cc6a38bbf0cb303
COUNT = 27
Outputlen = 256
Output = bc7d54432d8445f792263d0dd18a998910b064e46ec9aaccc4b1290c5cace670
COUNT = 28
Outputlen = 1672
Output = a0b278626da8dddebec11c73355080c4fb436b3102e705a80cea7089c1d02987c1970cc74b4c4b80b08bd51731474086dc2a5ad30b9e51f1ac78b3e46b0a19fc78e3106c6153bf33b0cbeeca2178384b038529aa0fa9194165edddeb682af291b81c0fdaf5f913310a221e4d607f93e88ff5bc953f8472ceb13c7eb61218c1866d92f1ab50bde3453375945aaef55e2332cc24562dc8a292fb6eae08e257ac0e23d5a002cb7e7c7a6e3347909f708f2311f2d31bebd7964e6db47cae8a6682a8a4fa6f347c92e497d0785bbb05b115994b
COUNT = 29
Outputlen = 1792
Output = be2c9ffb564806ef22714cadff10ac09b53bc2eb7b86dc6e2ec7650cf3f2d6921acebe46b799219ff778dddad4601a6b7a3ad37877c8c10bbc00754a144f251d62c8f97fd22c27c9276b05a31f4aa05b8e508a593feff6b9d6602fef9c11daf6fbe1354940da6c674740ac6ea431c59457c7034c5af018cb7ec3fd5ae52d3b389d8b46823d56be8df810d802c4a982760d136c3a3a5d0cf8952cc88d16a707059d23d41469fee8892bf438fc39f95ba6e1908a96e7e9b5c06736970e7ae33a20abb80e7c79cbfb4090b5c934c26021c9013ac1a65165611990f420db2ee812a3
COUNT = 30
Outputlen = 1816
Output = c7378b09d5f0090dffa3eb7151a6c62dcb584c6ba2fc0dc21e0f9d71e5812fe148b08eb4dc229d8d52831fed4998100735829bc0dd834ed5d12004cbc585e5c608524e9a76359fd153854c2614a4dcf060dc308d867c7e6b282d6f593c2b0154a65d4567f280e5d5ac78a7b217b4467ecbd219696c8e70f775cdfd8384cb153c2dbe213770a0fc41023ced45d16a331e75ca432db7b85a207a9785aa2e2ecd40630268f82a433709c0324ccda6cda1b4afda3808f94cf367dded1a5d86cbc448e4237dc8accfeda403f0f3cb17259e996254257d96b82edcf13286a82d1f010e5f0b2d
COUNT = 31
Outputlen = 1216
Output = abaf805efea3e82c7cd6428fd26bc24a88bf6f6d685b11937ce4681324fa0ebf1e77085c7639013631b332345522b3fa4a0f83683557dc497b617e0970b804948082a967e8a0c998ae9cec6fc756c5775881c2ed2984404eb7cdd486121044aa1881fb14cb47b3ef69534c28d1a5a855673454c545033b3bdfdb368571973c0a47157a6474d1d993d40b900084a6955c6256a66d58dbe7b3
COUNT = 32
Outputlen = 1968
Output = bc24b66cc5234e6a1023dea38fac6c8254305730e5975594f37adb94a64cb59b9a535f715bb13f3139ccea25c456f6654f941b40a75a7649b36c5ef13023dd3aa958bb4c890ffda21d6df2b0bd67b9bf173139e0fc23b7854baecfbd9cfb04694261cadb79d3a3960a75968a31632f336544e160507b0e4cd9a9f2e2014cd3811176b5691eec7cf34991ac773c88edd3aec0aafeb78fe2a3e195c79fe1f9a296cf5a107f51ff9f18e1e3a68142fdf60738b45e343cd4d9f1a0c602869e680773bd0edcc9c4666550178628959126e0ffee7bea8004def05ff7f4311c219da1458f76270c1044ac3b0b1077ae3bcdc2be6dba07c7dce5
COUNT = 33
Outputlen = 168
Output = 92ba6a7f42eb72b593bd10952a327321b2855230c8
COUNT = 34
Outputlen = 1760
Output = a3d3d1b5207dce5b3f1ca70f7f6c6221b558348caf1c7b6da61b3bef61a4d533378e8bfb5567fa30682bccff02d3913442ede3dfe04c7d76a345b0a797769efe440f88d806482e2f6b2b8c00c61fd0d47dd05c491f3ff24b93b8d6e20e481303d89d10d344b7ebf82030a02f845fd9b713739f4dc00dc443751eb6007ff4059b6f5d2575d1f59cac700a734fc19e7470b1a6fbfa4acf111f79abf8a4ecc6f3b438128eec8dc9d90ed9e3f5833de6422fab8a827463fa232f80b714e34ed16209b951cc611e53854b6f1488239142e6701e9b7709d42a5aff6c749850
COUNT = 35
Outputlen = 416
Output = bcbc7f49f7757d1d56c8a2971371c6d4ba8f5fb87a730921254049b127e599b77573a6d5a6cbc1be4ef1b8c7beca81741fb84237
COUNT = 36
Outputlen = 1288
Output = 71da416b98ad0f00752cf1977809f513695c518f3a5cd1e256f7a6dbc9c760da263c9d53c827f35f4387a4fdb3f144387ab6c2c5d7b80b6659863424fcbe312f65d06bb68a4129ff4ad4099266fb3620a49b6bfbfc8752947424cfe1b97013d6db9781ed3f10ab36da973d2efbb5e0e9afdce9079d401704b6d78afb0147cf70d1daf40a4ce2173acd77e985b213c65fd1e50df2a47397823181bfd9e1fda120ba
COUNT = 37
Outputlen = 768
Output = 7a396a8806fe1079ed8adf38b62b2180d43913c008f0423a691af17c49e288f33af9ba6f62b8a0fa645715f6ca17dd6f4f061ce1553923ca61bfe0b87f20f5faf9a154381a28a0be5ba17c1e5a85f8a8f2c8e981c48deedd3f1a09ee0255927c
COUNT = 38
Outputlen = 232
Output = 0212cce901fdd3182ec3b4f06c24c948ba7d7f495bb7c07e8ee52e97b4
COUNT = 39
Outputlen = 1064
Output = 24a8375c2343f7099fccabe337defa640ceb0bce487a465b49c1242130fc01a02d17e7212082ee0fa3e06bdd1a0263f259b4f6d2fe92e9e6ec11ab382560ed252e4f8d261c0cf00f97f27a156214582ac5f11f9c60db9c016e056b42558f9b7b437a6d74c9e2efb5cfeb4d00f310abbcb2bbfb5c04f5bee2d551490980efaf53b7d0c369c4
COUNT = 40
Outputlen = 536
Output = 169b0921ea737777407e913c0474fa545553bebb797ac93cd69a4066cd2bd721f3501d89acbe6e517e403b63681235b6c0d9429fecfe26f48b11e17c393de9bd6715e9
COUNT = 41
Outputlen = 1672
Output = 662ddd89711ddda41ca3974604614ffea8f3ffe80a18dba7bf2fd352e0d277d79cf9d8a7fa84281f80d9272d0e4835b8b7180202b9ab777a37931ea8a100a05ff5b96dd7a46799b19f32c44c8767ac152bc4bf5464e9b509ff196a7a3a0f77feca4934a42e5d3d3bfd09f98d14ab3595569c6b8094ddcf60337aee6a9e52382537e070ea69ed2c910d7bb1531d59a2ba60929d9ad6eaeb0cb23f62f62ca4a2e559749f6c581487cadbdd38655b7b097925f2f26ff8386df2a698cdd7ecdbcdcd64d0bab6ebc1b61a4bd9a68b1bc0f154c7
COUNT = 42
Outputlen = 136
Output = f5c20780719524f3dcf5252bdc3304e24e
COUNT = 43
Outputlen = 192
Output = 4bf62c64543d9b256ae96c43bc7b46703825a00d08439206
COUNT = 44
Outputlen = 184
Output = 1eea65c030df6c8aad6d0e2c3480c86ede63be12e7d444
COUNT = 45
Outputlen = 1200
Output = 27512e1c4c5c45760e0c6ac9269ea8bac5ea42333422e38783f348f1786108e0e7af2a035c89212125563f75a3b479727077609f3760d1cdb7b619531ca62e999d462b7db002603e9674b9d8dffcee9ced6fbed319951beae8f68954096009e5c38f7a66319b076e9c2b8d153b7b125f9dde4f455a6c0ce57497ca0fd415bd9663c053cd00bbae9f4f4d8cf58a39a75536a80b8c3375
COUNT = 46
Outputlen = 544
Output = cab4cc0fba89afb759f69846e03524667360a52f617ce6730043a3f948040a901c8851819e14ca03c28a444a19e375f9b2e3e9527c927786d5ad4f940eaa350efe6f499f
COUNT = 47
Outputlen = 1488
Output = dc0011e830f88d68a5350721bc1aac73592aac95a1f4ff09b617a45eaeb5b9dea095f286bec235961b186fa2b6b0df3f029eb4a61a037bc13d28abc890ef31a9d37848f97986852fcc5b8a4a630df6aba6a6d7fbab670206711067eb21f6818c284c7f83495f5feada7c3993403444d488f9d03aab512351e456a42a6358ab588f12d7d7767936b4a2024bba7660aac3acb54242a6a8a1606b2ab55b0dc10c3730716b7f228ee64f679e22ad7e37527e1a9f68fec331d3d4d187
COUNT = 48
Outputlen = 1512
Output = 2b8978e91f954adc860ed7d79cf416aa0b5ad87098074f75fd8cee3ab20668beb464aef2ac1b3661ddb03115e5599f23b6383f4d009999053f4acb7d70aed083111607bf23fd60838fd737a059bf6775773d7db1cfed1067a1bef3b2e7f1cfe9bd8d48eb62f0d6cedf5fc20d73ae8ae4854a9109c8665f726322ae13e6bf2ee02f95e0c1887fb516ff0c53cb373cf517f699410d5a66928d88596c1ef0bcfbce8b6d43192d9b8a5793c78583a57ddce5940d4b28fb1d0e5cd17e7c98d7
COUNT = 49
Outputlen = 104
Output = 44f29410850ad7eafbe4844320
COUNT = 50
Outputlen = 416
Output = 9975a09bd78673f390d617543dae60b8d8a59be0040b96742979e5ea50535ce5b3d65a1bb0322bfe498e2956abc4b28ee613960a
COUNT = 51
Outputlen = 872
Output = 152b5968b40058ef36c2b0b85395c33333c5143625a4154ff8b2e38cae6b67080f7d5f094d727cff966808ced3e344cecc57c4faec3f5ab787b68cc79b5e2196d9acd5a5a2aecba21aa4eb8863aabe051b1f637584ba5d63495b8bd4dfb5107f8f7f2a1bb10d2db8ef061d881a
COUNT = 52
Outputlen = 1216
Output = a7c2fae554de75b6bebca3c04702fdd42bceb39f609756aa0e79baad6d60068d1c97b77e14471208d204c292787981a1193d1bc8e71a39df5587068308c58bfb198dd1fadc52206db3a957c8058fe19bad838d3b73387caf31fe5c855ef3337911bf294b817f482f745499c66a4bb06800dfbc8b6f0b5c828ac4f3af559ce3bc6725e4fc04774f7478bb0f6ecf61ad9fd834d7e77957c30f
COUNT = 53
Outputlen = 1400
Output = da798fed091508aa7b457fd3e59ccbd61e2d316d632f1bf38515bc743a7b64bf21753dedc40212265fbbe1047eb102aeeb09f5798c138c30bb920080262d80428af72c2988a7783f50b9fb0290b1cfce3908f7e7be0f545656e29aec07d95e0837133b69d486917192997d6e56839f01e67936e8cfcc871bd9ec8a6c8ccc5fb6b2210cbac6262c7b123a5cdc5ad54c203e8a3ca60b72bff9f2db951c03f5c79543f69f373a72df40c120536e56f139
COUNT = 54
Outputlen = 1904
Output = 5c7a777762c77d0da9c26019fa5cd7be61d4ebdb50eff7784f2bcd8e2314932db583567edba4c22c951c9b99ad77222b0a7880aa800d3264a4ed93423e8d665d6cbefcb3cd7410d2aa7b91661e0acb0b904f2532c4411a901aeb1b78eff691435a8db4c238e6e3781a1f4bd1fa41dcc1169b6bd37f66163fe03a787d09f2cfe4673692a319ea117ba9e3f88d2cb99b5e2b4294848007901fb4ae4a7acae859b2d0ab0a4ec91a2d427d0ae02cae02dc9021c269caee7c089e6d54f591a403036807f2c55371e0c143391e9d0111d68f5a4d7c7297fc0df1324b1e584727d5edf74fd295d48afe09aa015248cdabcc
COUNT = 55
Outputlen = 1808
Output = f1b636cb440a888570d4b6b1283ac9a539ecc518c70a705cadc1ae585b08f67ad7a6f819b735d0a0abfe5f6de6a01dd41e447e92d0138949dc0547e486abbdbab8fbdf6e0559bcc6edb521d3aa14aee746905fc441308f4e20adcb2385073d6b291e4e5c03730141714e5f4bb4d4f9e0ba32c7f00f593042515908cd8a8ede0e869c183642bbde70dee37763e25ccd0d58000098a73b43b4c12561712f772a78c9f991fa14aa92e7b6ee17c796eba642bc02e867757a186cfa2360a930cc63c0c4513da1a255c4be9ba12448eb59f687c52614276f777e80266a2b070685ca9b1c64
COUNT = 56
Outputlen = 736
Output = 7e16313dc07a0356d0bc8a933ce08a45ab560aa21ca0da25b3492bcff61d417fa2b19361a84b40fa7d22e97687cd4859030e320dd4e7f968ec6b7078f73a34f9b8883c8d622aa623dfc673325950ced8ab040f52eef29dd8aeb19992
COUNT = 57
Outputlen = 720
Output = 5bae99cef46718d8b8223cf95a0f528e25a5b5786f1af36c142e52e050c03df0c69b240050439b29018589a75d630dc280e8b7489a0848d32d8174c6523efbae303bf1ee9b1d859e0e05e08f3db0edd8c4acd30cfd084e801365
COUNT = 58
Outputlen = 968
Output = 01e55ba4e739cd380d5e87a1d8a02dd14811806180fceed243e48af0923e0ce57bffad439a66175696615b9e89c38182e18e6be7701030769312eada0c0d1745bd4f0608ab71c8f3a021229da7c5de84c326170f6813bd0fdedee22174a89bed3688d223cbf7ede15e6393b99e9508ce2d198c8d3229d57c6a
COUNT = 59
Outputlen = 1688
Output = 7aa64b4cc420a5b95d7c2323e31aeb0cb2d61a09b8451051a22d666e7a81c17cdc67c6615677de82e73d83c71ae6c05a5048e4b242eb80f881327396d0eb0209590caf25556f7c0fbcee4ac6557e9ab2888f7598161445c5fec22ad5cb318cd073a345e19fd98c6ff9b1f89c442212f93352f166a9101de4a1a80cf65ac97cfcd93c1779c1225f1875b9cd0decb7744530bc0f9753a3edcb50b9aa3b244661c3e2bc906314f6b446bb9b5840f17f67b026c12a8b4f29820a8bd731cc381845698afc4a71fe946896be9bb2fe29484a9d0b2498
COUNT = 60
Outputlen = 272
Output = 0a21e5f227925c836364647b8788d80cc6dba2342193d07bb4f61cbc0a4e72d007cc
COUNT = 61
Outputlen = 840
Output = e493f1ea5f9b472b89b40eb49b12594fad014fe6529c3f9d2b46677d5a8f7d11d1a156596180d26c251e524d8be5a574fae7643f969869886c8cc5375ea473aad8972d3b7ecc2b71c901fa0ca03ab52404bd9d5f97d3636941ce62bf6cd914be367aa486c7b45caf70
COUNT = 62
Outputlen = 1096
Output = 8c9cc58de55b402c3644bd80629f11780dce8d426d1c4277ed9071be80c80efe32756c4e68bec4848539f6f3f4beebfaf2fb37238778725bea071ebc8b6ca8b6c0ba8a77065bae7238e8169dea89cd0985fa6859bf80fb65db5a3c6ca9446bd4076df81e93d0def29e047be68e10404eec72fbb8fa6b2e7178ada15027cdd53daade4221ddd2b4b9b1
COUNT = 63
Outputlen = 1792
Output = c27310e5d7feaff5fe5b18a52c302b6e7ca5cbd8e24af50644fef02f56ff39a292c8be5765cb5be21cb6b16ef6b5e879d9421c375cc45fe20eea485c6fc8dd1edf791b203ecf195abbbc7be6e09ded4aba52c14d4dfc7e753586947d67781696c52faf38144db1ca398d1a789d3aee5b4d60867eb59f8eae0a52fdbf959cbbf87a2580fa455abd7026fe4293d5a553f73eccdf1dad97bd3f6a83b8609e512b8de49034b5632f92d0d3c3095a25b8f31be4da99478d57dce3a298ffd76633f08d62f27ac327dfebfed4937a82dd82dca3a783c3d5924afd9f5deda7c28e5fff37
COUNT = 64
Outputlen = 504
Output = dc9c5084fcb7c89aa770dc68719b9fe4ed88fd3e5de9d0e6119f07a2b6c9da161d934e7026d82e22b8dc174cf722f5a4d27e420e8d6628f0e9e4c282b9bdda
COUNT = 65
Outputlen = 136
Output = 39a30ce532befde1d7ddbbe4525c9a6fee
COUNT = 66
Outputlen = 1640
Output = 91711fb97fb0ef1b9a551d28ce5c44a0a0e67333f3b4bb3a1c6117a1e5134f8772048740c29331f10ca99f551880675316317852b52c9e1f7210b1828e6674026895706ac9a35430133843bbac200f36fc3824cebd3e0e96e114a231ddbe8a2cc29b29e1b84b37b9070ccb435003f82f6c0b09744e4804137be904f5772c35181e3f3ec8243b40b4476a2e8fba10677fe55ea1356d5843cb3b0fbf8879b27993047ccbff4a6d48cbc78354a0c69503fb9db5967b835497f9895e75a127503ebdea5ce7998c971ab6f9b80a7a3d
COUNT = 67
Outputlen = 1752
Output = 6467a6ff4e82450adc9fab288134b34b8ffcd8e6bee38e8257e1efb3d3ee8cc19fd9bc80da346b6d53c1c82498c9e299dfbc9f9b442abc42616c29dd7722f45ea0ef5cba3bd863cb8495397917ff3b08510b1cfeeb6b59aa35fa9e71b111606ac08b0361a34fe4e40997abdd7eaf1add237fa17a080051afb2ffdb5010d3753453dc4c82b8150ca0b37b17031b18d58a4284cc2ce59507f09c1a668da6d0c853a38fde60ebd10eb570310503b8d370a31229f130fb2d002040eb7772f014bc7c4bc7f96d0880dd9237e1a773ea114126c136c25b8feb2e94756d6a
COUNT = 68
Outputlen = 1128
Output = d81e7621be3b1f896ca06d3917f74286c445e0b7a771a9c20d5c1aafb307d6bd8d642495845547250a6e5c09b100886e75a9d648be75436207d98c0d696fe919596fa1fa5735a11aafdd64af5108f379f119203dca4c5837aa14e226983dd21a88f0df5fb161608ba65acc05b3d4f8cb1accdf1b728fe75e08da55b4eb4210f4ca39bb28b3140c7b27dbdb2b19
COUNT = 69
Outputlen = 1056
Output = ba5d7d44a1a9787c113b343fa6d49d4650e28d93c6769aaf130ad6665a03d152629a1b11ba054681f28a430c9f070d1c1ce351371805c63ad94c961fa27cc514831aa8f8335d373a2ed119855701cb1ee1c9d54c6576c0990f22d58051091d59044a698f064557613749258474f289a9270939f6cbd304d3ee9d1fb84c2b29382150a781
COUNT = 70
Outputlen = 1944
Output = bb059bc7956e9eeb1f5ebcdfd58b820a41768e58a222fa235448a22ae48ccb46adc06cb5178a03c291b0d4d8e0549d6da2296d0b5ea3b9b8f0ac5d9f284cb0228c12e1cd454fc1fb0bd5d866297392074ae554dbb4dee6c377c4c669f532c7eb53d7b49cd991b5160a6fa6b0323e999e77fabb89dcef1c200ededaf2e0fcde892c7b5889f1c159884ce103549fdfa319b3ddd6cb3828b0222c249a7b27645c41d3d280b603ab6b616241c5d4305306e67e5635fe8755d6e1359092024a3ba327a282e6907a80d0865f7369fd2f0b4003f5d6a9aa2cd85b372021d691cb42270c79a7161964a2743873dd4ed1f08ea73c05c407
COUNT = 71
Outputlen = 1512
Output = 59af1be6ceec69aa42e1bf4f32a03e4f24e6421bf44e5a4c347d859304d2b7e95bd569f3e485b3c078bf6f40f79c0b82d8db0a2ff3652ca01c45810ccdfd3cf9969e7e46f85c202c8ee16e65d85fce460d1fe4fcb43cb54764785c1cc068eebb30be38bffa37313231e4e00b656b35e4ed2697f27ea91eefcb57d3ab8bc2104d527d5b4fbae8e4c569a36201e636544d2a4a8fbc51476cb6724dd060f0a4fb2e9ae786475128b82a491eff93b788882dc41fe7e13cc1c4165278d1480e
COUNT = 72
Outputlen = 1680
Output = 5bebc88d02e23b332775afd9eb98c04139a262acbff73fa7bc342aaf4628d6484df38260ac297d11f95081033134a3c58a5b82c471c8848fe169f0f6bac8a7f9b251164870fb9301add607cdfc766aef33520f3e0cc229baf2f21440cbe8f731cd31c08662f8e2d612df48f3e0930e1924761e26a8112d22dec0999db4b643df019ede1a05ac226841c94e5a36c546eec56bca3b434c34a4660ca44079747b519ed32d4908b4953174d20b3e4773d1af45a3e3d3512581376fabcba6a41cd07c1c6969a0c7b52b983eb4788926bb77b16a52
COUNT = 73
Outputlen = 1144
Output = d0be68b4a3387b8ce6fde05405ca613b24ff5652e68e3cbf9e1e0bf40d3243fbfdcb64adc6bfb971fa4d955eb726ded12d3853550c2ee48b96bc1410f250940c5d3198b7809f75eea7651e202645f45c68301c324e24710a2b45b8dfd3cda02392a39344421be848b20f4b809bd6ac02905bc56a25a21d834b55d26a3841ce2213e4db6752f07853eb45f22fa6729d
COUNT = 74
Outputlen = 360
Output = d5d1283a32d89b5645c583e01319cc3b2b535429b1a058ddc9883b0b3a7f9d0e72535839b5a2dc7a6590c7da36
COUNT = 75
Outputlen = 1944
Output = bc86a0b42036a195570e99d21d05bfc8e168cbd265b27a30ee408a5fa8aeb08c06c23d27a9af713cbe7062d9af36b833ab109b7a50b3c5a6bf45a98eba5058e7b41f694cbdc4cf279814de1dbb61cfdd4d1a5350e3c3bb1fa810a3a4615542933c7719cce04107ed894786b6e5ad2671ffdc699ceb5af356a80de98c2a3331e68ea6b4ed09cb13e6fc30f029b5c1d5a79c566e07051f626a490128a1ad87135dc1129bf555c569d09e0f6ff4ab22c8420e7c3d3a9e5a7a0260da7024e4f99bb2ff88abf4707a879f00a5ec2030a7c6761c76ba13dfec716628e416c3767f70c4771b43f5ee6b7c95957d0e5c3f40fc859d0048
COUNT = 76
Outputlen = 984
Output = 719b2fd38b022c6ac468b91b4c882a593919e3affdfe0b61245c6fa080731bbfb9dc9be6341b4093d9b106624f5e0bd45fcad956a8e52aa40a1ac0a86d114113222ac35e7a7dce23ddcafb32dc17bcf9c7f79d846d29ae5a29301da38d90348810aa82a98431e306c7ea949c783e188b9351d33f49a56b659e2828
COUNT = 77
Outputlen = 1656
Output = f31e31e0c235cfa5b3983db2cf371d9fe6b81844a729024a95ff0cf20034fa57a503d3e9f4a7ba699d607ef61e7ea4d27d16b30a35ca530c710c07796f5f8614f2f3711e0b839191122e47d29b9b39813154cfc2cd061751b46e38810ed31e6ef30abdac100cbde9d61b7ecf14701bde65d59f0e30fbc7818fabae511564bb7ae77de54920167f08c8e2ec46c0d2432dabb8f3297ee28e767374ff423a0c928b8a763a01139fb47a53f0b1af6e29ec870b1e935f4803bb73737cf5ca70314ae5cc6b32fc0645e7345da5e0d6ab94b1
COUNT = 78
Outputlen = 352
Output = e0318f83da775d94de220c9d2315689f5cbe959198abfc8abb2841044dec62bdb08f6051c0a50b2c1f93301d
COUNT = 79
Outputlen = 1520
Output = ef0e39b04fd1e3b2ee6d00c50f9cd56909fa7c7d273fc52871451ccf8367252cf46390eaac0dd547989a9838e30b7bc30851f6a0b0973926a08c7487d37329f35f5ef70edcb84a324d8ccfc25ea0bf26cd81b966dcab453e3d398ad6a6a61c3fc24866705419c04928f1a06ab646ed451e1e54e1fb2c1eed2a9c7e77a255e9869026308ba2bacfe47d7305f247a50a7e2128fad4bbd965b1e514f102d79e3b98b4217e6994881b16336f83bc0cef24d96166dd8b09ff694191c52c53079b
COUNT = 80
Outputlen = 1352
Output = a4bc8fbcf838fb6d22011a1975e60139db520085ee47e0a5259645d57ef748c32825c120e06642cac5a7549f289a9b4ce378daf7408ea7a5ce5d11781429ffc34ab24083fa90d92c75f66070998c3595a536fa24d3b077f94a58c943a61b5d82149dc616f70ad073a6d5f185ad302763d61105e3c7f49d32122b20f5d09dc0e6c09d7378767f95068267c57303d9d0cdfb33545e02c4155ca16523e0795b693fdc95c8c8c380ffa332
COUNT = 81
Outputlen = 1776
Output = b3183ad27a974cedc7e5132c76ef9966169601941e9c9a306fbe9879147dc7c8b0013663cc00766ea67733f0713f187491114e48e41cdd98d0a4a8bcbd908aac11655a2db7fb630344852a9b6fcd6ddd0950ae6d0c0d2ee1a9bb9aa86bdef0a9a398ccd05926bcb692e96619b077692f3c068013bf110c10c62f9b4f7ae615ea7214cfa2bb0ff45e4e72d6dc501380676b63ae59990c424232c76d720959393ded7f046be997e5302c2b16e5dfd0f59e9731c21c82f1a1c921898ffb83f159e5dcc3e159ce6bdcfd513d8dfa58f31ad4ed2c2a30204fac6894d3ddab5453
COUNT = 82
Outputlen = 392
Output = 922bd8ebebad0076fc83a8876f791160ba9cc1b659e7076befe83ba93cdec912c4bf7d44fd7a76f73883ef88697441991a
COUNT = 83
Outputlen = 1936
Output = bf3c65854260d6d8562fc0ae471da21e51ff0e1f41f578124d42c296da8ac20fd93069809d6a2a1b5f605aba8b86ff0988337630d80502646c2804021cb6604ffbda677ff7a396e5c469a34e79659ed5ca0470f14503ee4c5908dad21b6bf1d63caf235f9c2d37477207773e4db84b0db6049ef26b0bbefd87027fc36920ca1e5d9404511a098bda51863f7e644261af793b493656c24da80e60c0d9001e9fef7221f84d376e3c8b1168185adab6af91a779ff07f46f5e8a6b7b410c39950e3b53015564c8c73cb0c6a825db098a805adaf5ffd0494766f33c01d31693615e7ae5db6a47d692484e0071e13075c3faf81544
COUNT = 84
Outputlen = 1272
Output = 83385cc4d361c1639639522dc3b1ca9f33838067edf21def672c85b4bb4904c0415bad1076a7edae7044961615643fa570a6393e08e8da0ca810d81e82836d50a26f83025b476f9b554f6b220d910fcb684ada03ad3ea07e8762d57944936b53ca09f5efaa613f072e9d9830d069921891eb88c2060cb95112dc0bc45672866c806f8ac124e95f709e53706f511d744340582f2338b91eb61b3d87f6d3049b
COUNT = 85
Outputlen = 992
Output = 07d86a336fe92e7193bbab0c1739448bd8cf9614c4162b12ba0b2bb47395b1507c1535f75010a301fb7a43f97f9d543a686ce9543e3784a9cb5527c35496f4f91ff1b43cb5b0962633b597642787d8234b555f8c5f639c2ca4be6b39d5d8420508804e0f22140787cb113433c1810e488b6f6a43a61f478ae4004935
COUNT = 86
Outputlen = 1816
Output = 72df76979aa8556ae5ac3002574738ec5cfcce61773bf94f4ea1b8d592c6c90f67a985efd4f951bc82096a54af8e9cc9dedfe12d3bbe75283d1bce87863b3cc47272b3a8494b8a6e22dedc0990ed9f970eeecbf93d0ffd26bdcf9d748600934d54c201e19e13907ec35f3dbcac8c6a344c5bb2406d9d1172c7bdf39e717159a8f992874d1c0c6535ee467884ebfa17e1da937df12071e4f8c5b71983c8233236dc54d8aec5d7ede192a594887c47154dcd937a54f92a226b777e94e2f43b272d4848f83577fcbd8ff84a8776b56e33543a16574d36e59eeb5e26513c3d0f69a204242b
COUNT = 87
Outputlen = 176
Output = ff2bc49e63f2c112eaca224d1e05289097f58d16f733
COUNT = 88
Outputlen = 776
Output = 18441843fa85bc280cd95cd3f43514336f278cd286c2478f59900ffce123105fbaaeac2dc619e5a4b962cc102aba16ee394ef88ab52d7db0e05c5d3d9ddc4260ca5d2c067a240df29698f549607488dd3e350b02809305b171d2e36f6c142aba38
COUNT = 89
Outputlen = 1256
Output = 13431cb556b144086164c7740b1e504caf829d3ad180717b0c4d0d45d1ba2a813ef390ad48e2f09a8bded0ce9a1f35a8151bf0b46f4175aee16ffcc0320b9c1377614a15e945064fa8fd5854cb990c4ab7fe995fd359f97f90c2951aeda3a8604b51ad0f0833aec68db445ed559446d299405536a30c5fefa47b535dd42137dec6fcbe93a6bbbd4553314880beab69b6baf2fc7ea63ceb3460c8f5f6fd
COUNT = 90
Outputlen = 576
Output = 133f738cad7f785c8abc94fbbbbd62b18aba30137f731dfd902b890cfb16ba79fc2f4e40bf7481214d7b5e9551687506eef536a664a56fece61320abea6bf18812c9c774fa49051c
COUNT = 91
Outputlen = 832
Output = 230788c864c5f06365b33199248188b5e8c6e63837a46cf310ce10e462fdd44b6e7a5664b10c922fb9a2eeba84d1cae65a1f5529c0a60ae7723d1d86e1d04d98b10ab987be36ee033902ef0b6396506ecbef9df318c6bc9990326169ef0f6fd7b448f93dd61e8171
COUNT = 92
Outputlen = 1640
Output = c4aae776d5910d08bafd34b7b25826dfa37aa0706dc1f644f13aa9e177a5f095fde16eda66922bd75f15d852d908d1eaf4ed34d4edca317d1a7a1ef000977fd4b32c9b45d6bec0d802929d95b53212cf89354ce41be8d96f1f3b5cd2ed964aa075313af3077f083139b93fcbf50bc7232623733989dfb3805c71f29f4102e259956cef829c850f691875c7c12822d0522dfda684cfd918451f89497317253d4712171bc7a26ac66fbe4bf6eb82d819c8edba3eb9c9e6f6cee6c7b432c1610e2e8586b3eaa05dfff639409cb85f
COUNT = 93
Outputlen = 1544
Output = b6bab27670c2804f21873b2dc121373a434b3f60eacdbf90846839df6db36e9e4405303f26b56e3c06b26f38ea6f98ec8309f9226e98a0a4c804544c37da4db196df7c17d7bbb28dfad2cf04ec171032125747050ca2c2fd8e6651ef552454c3d6514d8a5a8a3b96c442af733708e716c3bc75ec62e0ddb284e55c9d661b2e1a643cc2259be676ab0eba26a054589d8cc93e798b494a1ecae66bc4eb047da41eec7ab15555d8bc47a9826dc707183be2e0255bb5bdeae241d51a75d3e998013a83
COUNT = 94
Outputlen = 1824
Output = 9d225f7997efda57c4168b8cf2ee4b032928a79276c8bf0f2d9575b93942fd841d75e53125d15276e1264390bad0bf156a2cdbb29dd2db7ed1ad7e111d768e0e8078e1cb4e9f894c4145967244a4286be982c3906f00ad95c24cf735dc2928b1a3a81ec0dc742b4030bafea10e8d735fd4c471a0a346e00c288c71aae631f93a8978068045aba404ae4439c9162bd61ba56754e225134af1ced182dafd9b37ac337fb61977178aa07e1bd57f1152bd868aa3fbe7ce7e3990a15a85ce0e90751a52093f6533da4effd7313c2c6407478f26b2f2bb50ccb16f5949f549066e5f775d2ba89a
COUNT = 95
Outputlen = 760
Output = 9d341f3f4ee4dae334b81af3557960af0a56167a76c9668c0de3cf8d608edf8be69a2fd6398517cf3de5c5b0e9c7cd38c38de345e5dd5771b510cb1b95b73f88f063c4d4305b4597093e9dfffd53d68c63fb0f9efe16c429d6d55dc5e2e8d0
COUNT = 96
Outputlen = 1552
Output = a67ad328a09a2e724b6d3e9da9ae7876bbf2b77ad510d26b5a5d6f7de61fdaa74f2d615a2785f3adaf984a845c6dad81f09a7db3cc82da52a954ed7b4c781a58cdfa6c9ac4c95a4b37af8858493c45ea90ad311d902d9c00c6834ff80b2fae9e579afc289b3417345bee3d71e34cfac3ecd409a51d0cec24596a95aa0aff85e01f9fdfbf41acd12849dbe2bb683fa498d8acdac13d393e45efa3ad0ca7699b8f359e34638ff477d00e9be46d6aa8aca10fc33ad3bdb8ff25844d16b3766b0ecb55c2
COUNT = 97
Outputlen = 736
Output = 346324149ce7fce0316759dfac98865d6d0206202f50a0ccdd15f0e8a20fcb335a1ca7457ffe619848e752b017e50486fcac55c47eb336ae699734fad2c086f1fab18c50b0d80a0eab279b511d934542c6cc6b38576b6b75a87a4793
COUNT = 98
Outputlen = 856
Output = 5e3be720dcf2b08aefa72bcb6b26f7660de376d575b9fc73066031800a891184aa5e534f6d8d622901ee5fa6afcfc0c454748ee6c14805fef89e35639c9b35df11e0741880c103a4a98ccd0a37c6cd4a374eda616eb3e0263ff46f4ea9b4853a0777ec98b63bced13574b9
COUNT = 99
Outputlen = 360
Output = d4c8c26ded38cca426d8d1c8f8aedb5c543541333839deca8713cfd8684480fe923f57c3a5c89cb61427c220c7

+ 1100
- 0
strobe/python/kat/SHAKE256ShortMsg.rsp
File diff suppressed because it is too large
View File


+ 6239
- 0
strobe/python/kat/SHAKE256VariableOut.rsp
File diff suppressed because it is too large
View File


BIN
strobe/python/kat/sha-3bytetestvectors.zip View File


BIN
strobe/python/kat/shakebytetestvectors.zip View File


+ 471
- 0
strobe/strobe.c View File

@@ -0,0 +1,471 @@
/**
* @cond internal
* @file strobe.c
* @copyright
* Copyright (c) 2015-2016 Cryptography Research, Inc. \n
* Released under the MIT License. See LICENSE.txt for license information.
* @author Mike Hamburg
* @brief Strobe protocol code.
*/

#define __STDC_WANT_LIB_EXT1__ 1 /* for memset_s */
#include <assert.h>
#include <stdint.h>
#include <string.h>
#include <limits.h> /* for INT_MAX */

#include "strobe.h"
#if X25519_SUPPORT_SIGN || X25519_SUPPORT_VERIFY || STROBE_CONVENIENCE_ECDH
#include "x25519.h"
#endif

/* Sets the security level at 128 bits (but this holds even
* when the attacker has lots of data).
*/
#define CAPACITY_BITS (2*STROBE_INTEROP_SECURITY_BITS)

/* Internal rate is 2 bytes less than sponge's "rate" */
#define PAD_BYTES 2
#define RATE_INNER ((25*sizeof(kword_t)-CAPACITY_BITS/8))
#define RATE (RATE_INNER-PAD_BYTES)

/* Pull in a Keccak-F implementation. Use the target-specific
* asm one if available.
*/
#include "keccak_f.c.inc"

/* These padding bytes are applied before F. They are
* required for parseability. Their values are chosen
* for compatibilty with cSHAKE.
*/
#define SHAKE_XOR_RATE 0x80
#define SHAKE_XOR_MARK 0x04

#ifndef MIN
#define MIN(x,y) (((x)<(y)) ? (x) : (y))
#endif

/* Mark current position and state, and run F.
* Should be compatible with CSHAKE.
*/
static void
_run_f (strobe_s *strobe, unsigned int p) {
strobe->state.b[p] ^= strobe->pos_begin;
strobe->pos_begin = 0;
strobe->state.b[p+1] ^= SHAKE_XOR_MARK;
strobe->state.b[RATE+1] ^= SHAKE_XOR_RATE;
keccak_f(&strobe->state);
}

/* Place a "mark" in the hash, which is distinct from the effect of writing any byte
* into the hash. Then write the new mode into the hash.
*/
static inline void
_strobe_mark(strobe_s *strobe, unsigned int * pptr, uint8_t flags) {
unsigned int p = *pptr;

/* This flag (in the param flags byte) indicates that the
* object's role (as initiator or responder) has already
* been determined.
*/
const uint8_t FLAG_HAVE_ROLE = 1<<2;

/* Mark the state */
strobe->state.b[p++] ^= strobe->pos_begin;
strobe->pos_begin = p;
if (p >= RATE) { _run_f(strobe,p); p = 0; }

/* Adjust the direction based on transport */
if (flags & FLAG_T) {
if (!(strobe->flags & FLAG_HAVE_ROLE)) {
/* Set who is initiator and who is responder */
strobe->flags |= FLAG_HAVE_ROLE | (flags & FLAG_I);
}
strobe->state.b[p] ^= strobe->flags & FLAG_I;
}

/* Absorb the rest of the mode marker */
strobe->state.b[p++] ^= flags;
uint8_t flags_that_cause_runf = FLAG_C;
if (p >= RATE || (flags & flags_that_cause_runf)) { _run_f(strobe,p); p = 0; }
*pptr = p;
}

/* The core duplex mode */
ssize_t strobe_duplex (
strobe_s *strobe,
control_word_t flags,
uint8_t *inside,
ssize_t len
) {
/* Sanity check */
assert(strobe->position < RATE);

if (len < 0) {
assert(0);
/* In production mode, no assert, but at least signal an error */
return -1;
}

#if STROBE_SANITY_CHECK_FLAGS
/* Sanity check flags against what flags we know and are implementing. */
control_word_t known_flags = FLAG_I|FLAG_A|FLAG_C|FLAG_T|FLAG_M;
known_flags|= FLAG_META_I|FLAG_META_A|FLAG_META_C|FLAG_META_T|FLAG_META_M;
known_flags|= CW_LENGTH_BYTES(0xF);
known_flags|= 0xFF00;
known_flags|= FLAG_MORE|FLAG_NO_DATA;
#if STROBE_SUPPORT_FLAG_POST
known_flags|= FLAG_POST_RATCHET|FLAG_POST_MAC;
#endif
if (flags &~ known_flags) {
assert(0);
/* In production mode, no assert, but at least signal an error */
return -1;
}
#endif

ssize_t len2 = len, ret = 0;
uint8_t cumul = 0;
uint8_t s2s = -1;
uint8_t s2o = (flags & FLAG_C) ? -1 : 0;
if ((flags & FLAG_I) || !(flags & FLAG_T)) s2s ^= s2o; // duplex <-> unduplex

unsigned int p = strobe->position;
assert (p < RATE);
if (!(flags & FLAG_MORE))
{
/* Mark the beginning of the operation in the strobe state */
_strobe_mark(strobe, &p, flags);
}

/* Figure out where to write input and output */
const uint8_t *in = NULL;
uint8_t *out = NULL;
ssize_t avail = 0;

if (!(flags & FLAG_A)) {
inside = NULL;
}

if (flags & FLAG_I) {
out = inside;
} else {
in = inside;
}

while (len > 0) {
/* First iteration will just skip to read section ... */
len -= avail;

for (; avail; avail--) {
assert (p < RATE);
uint8_t s = strobe->state.b[p], i = in ? *in++ : 0, o;

o = i ^ (s&s2o);
strobe->state.b[p++] = i ^ (s & s2s);
cumul |= o;
if (out) *out++ = o;

if (p >= RATE) {
_run_f(strobe,p);
p = 0;
}
}

/* Get more data */
if (strobe->io == NULL || !(flags & FLAG_T)) {
/* Nothing to write; leave output as NULL */
avail = len;
} else if ((flags & FLAG_I) && len > 0) {
/* Read from wire */
avail = strobe->io->read(&strobe->io_ctx, &in, len);
} else {
/* Write to wire. On the last iteration, len=0. */
avail = strobe->io->write(&strobe->io_ctx, &out, len);
}

if (avail < 0) {
/* IO fail! */
strobe->position = p;
return -1;
} else if (avail > len) {
avail = len;
}
}

if ((flags & (0xF | FLAG_I)) == (TYPE_MAC | FLAG_I)) {
/* Check MAC */
ret = cumul ? -1 : len2;
} else {
ret = len2;
}

strobe->position = p;
return ret;
}

/* Outer duplex mode: this one handles control words and reading/writing lengths. */
static ssize_t strobe_operate_0 (
strobe_s *__restrict__ strobe,
uint32_t flags,
uint8_t *inside,
ssize_t len
) {
unsigned int length_bytes = STROBE_CW_GET_LENGTH_BYTES(flags);
control_word_t cwf = GET_META_FLAGS(flags);

int more = flags & FLAG_MORE;

int receiving_the_length = (cwf & FLAG_I) && length_bytes > 0 && !more;

if (len < 0 && !receiving_the_length) {
assert(((void)"strobe_operate length < 0, but not receiving the length",0));
/* In case assertions are off... */
return -1;
}

/* Read/write the control word */
strobe_serialized_control_t str = {
GET_CONTROL_TAG(flags),
receiving_the_length ? 0 : eswap_htole_sl(len)
};
if (!more) {
TRY(strobe_duplex(strobe, cwf, (uint8_t *)&str, sizeof(str.control) + length_bytes));
}
str.len = eswap_letoh_sl(str.len);

// Check received control word and length
if ( str.control != GET_CONTROL_TAG(flags)
|| str.len > INT_MAX
|| ((ssize_t)(len + str.len) > 0 && (ssize_t)str.len != len)
) {
return -1;
}
len = str.len;

if (flags & FLAG_NO_DATA) return 0;

return strobe_duplex(strobe, flags, inside, len);
}

ssize_t __attribute__((noinline)) strobe_operate (
strobe_s *__restrict__ strobe,
uint32_t flags,
uint8_t *inside,
ssize_t len
) {
#if STROBE_SUPPORT_FLAG_POST
int ret;
TRY(( ret = strobe_operate_0(strobe, flags, inside, len) ));
if (flags & FLAG_POST_RATCHET) {
assert(!(flags & FLAG_MORE));
strobe_operate_0(strobe, RATCHET, NULL, STROBE_INTEROP_RATCHET_BYTES);
}
if (flags & FLAG_POST_MAC) {
assert(!(flags & FLAG_MORE));
control_word_t cwmac = MAC | (flags & (FLAG_I | FLAG_META_I | FLAG_META_T));
TRY( strobe_operate_0(strobe, cwmac, NULL, STROBE_INTEROP_MAC_BYTES) );
}
return ret;
#else
/* Not supporting FLAG_POST_RATCHET or FLAG_POST_MAC */
return strobe_operate_0(strobe, flags, inside, len);
#endif
}

static ssize_t cb_buffer_write(strobe_io_ctx_s *ctx, uint8_t **buffer, ssize_t size) {
uint8_t *a = ctx->a, *b = ctx->b;
ssize_t avail = b-a;
if (size < 0 || size > avail) return -1;
ctx->a = a+size;
*buffer = a;
return avail;
}

static ssize_t cb_buffer_dont_write(strobe_io_ctx_s *ctx, uint8_t **buffer, ssize_t size) {
(void)ctx;
*buffer = NULL;
if (size) return -1;
return 0;
}

const strobe_io_callbacks_s strobe_io_cb_buffer = {
(ssize_t (*)(strobe_io_ctx_s *, const uint8_t **, ssize_t))cb_buffer_write, cb_buffer_write
}, strobe_io_cb_const_buffer = {
(ssize_t (*)(strobe_io_ctx_s *, const uint8_t **, ssize_t))cb_buffer_write, cb_buffer_dont_write
};

void strobe_init (
struct strobe_s *__restrict__ strobe,
const uint8_t *description,
size_t desclen
) {
const uint8_t proto[18] = {
1,RATE+PAD_BYTES,
1,0, /* Empty NIST perso string */
1,12*8, /* 12 = strlen("STROBEvX.Y.Z") */
'S','T','R','O','B','E',
'v',
'0'+STROBE_INTEROP_V_MAJOR,'.',
'0'+STROBE_INTEROP_V_MINOR,'.',
'0'+STROBE_INTEROP_V_PATCH,
/* Rest is 0s, which is already there because we memset it */
};
memset(strobe,0,sizeof(*strobe));
memcpy(strobe,proto,sizeof(proto));
keccak_f(&strobe->state);

strobe_duplex(strobe,FLAG_A|FLAG_M,(uint8_t*)description,desclen);
}

#if STROBE_SUPPORT_PRNG
#if STROBE_SINGLE_THREAD
static strobe_t tl_prng = {{{{0}},0,0,0,NULL,{NULL,NULL
#if STROBE_IO_CTX_HAS_FD
,0
#endif
}}};
#else
static _Thread_local strobe_t tl_prng = {{{{0}},0,0,0,NULL,{NULL,NULL
#if STROBE_IO_CTX_HAS_FD
,0
#endif
}}};
#endif

#define FLAG_PRNG_INITED (1<<4)
#define FLAG_PRNG_SEEDED (1<<5)
int strobe_randomize(uint8_t *data, ssize_t len) {
if (!(tl_prng->flags & FLAG_PRNG_SEEDED)) {
return -1;
}
#if STROBE_SUPPORT_POST_FLAGS
strobe_get(tl_prng,HASH|FLAG_POST_RATCHET,data,len);
#else
strobe_get(tl_prng,HASH,data,len);
strobe_operate(tl_prng, RATCHET, NULL, STROBE_INTEROP_RATCHET_BYTES);
#endif
return 0;
}

void strobe_seed_prng(const uint8_t *data, ssize_t len) {
if (!(tl_prng->flags & FLAG_PRNG_INITED)) {
strobe_init(tl_prng,(const uint8_t *)"prng",4);
}
#if STROBE_SUPPORT_POST_FLAGS
strobe_put(tl_prng,SYM_KEY|FLAG_POST_RATCHET,data,len);
#else
strobe_put(tl_prng,SYM_KEY,data,len);
strobe_operate(tl_prng, RATCHET, NULL, STROBE_INTEROP_RATCHET_BYTES);
#endif
tl_prng->flags |= (FLAG_PRNG_INITED | FLAG_PRNG_SEEDED);
}
#endif

#if X25519_SUPPORT_VERIFY
int strobe_session_verify (
strobe_t strobe,
const uint8_t their_pubkey[EC_PUBLIC_BYTES]
) {
uint8_t nonce[EC_PUBLIC_BYTES], chal[EC_CHALLENGE_BYTES], resp[EC_PRIVATE_BYTES];

/* TODO: use SIG_SCHEME to identify the signature scheme */
strobe_put(strobe, MAKE_IMPLICIT(PUBLIC_KEY), their_pubkey, EC_PUBLIC_BYTES);
TRY( strobe_get(strobe, SIG_EPH, nonce, EC_PUBLIC_BYTES) );
strobe_get(strobe, SIG_CHALLENGE, chal, EC_CHALLENGE_BYTES);
TRY( strobe_get(strobe, SIG_RESPONSE, resp, EC_PRIVATE_BYTES) );
return x25519_verify_p2(resp, chal, nonce, their_pubkey);
}

#if STROBE_SUPPORT_CERT_VERIFY
int strobe_session_dont_verify (
strobe_t strobe,
const uint8_t their_pubkey[EC_PUBLIC_BYTES]
) {
strobe_put(strobe, MAKE_IMPLICIT(PUBLIC_KEY), their_pubkey, EC_PUBLIC_BYTES);
TRY( strobe_get(strobe, SIG_EPH, NULL, EC_PUBLIC_BYTES) );
strobe_get(strobe, SIG_CHALLENGE, NULL, EC_CHALLENGE_BYTES);
return strobe_get(strobe, SIG_RESPONSE, NULL, EC_PRIVATE_BYTES);
}
#endif
#endif

#if X25519_SUPPORT_SIGN
int strobe_session_sign (
strobe_t strobe,
const uint8_t my_seckey[EC_PRIVATE_BYTES],
const uint8_t my_pubkey[EC_PUBLIC_BYTES]
) {
uint8_t nonce[EC_PUBLIC_BYTES], chal[EC_CHALLENGE_BYTES], resp[EC_UNIFORM_BYTES];

uint8_t *const eph_secret = resp;
/* The eph secret is put into resp; responding to it conveniently overwrites that. */

/* FUTURE: an option not to put in public key, eg if it's already known to be
* in the session log
*/
strobe_put(strobe, MAKE_IMPLICIT(PUBLIC_KEY), my_pubkey, EC_PUBLIC_BYTES);

/* OK, sample the randomness */
#if X25519_DETERMINISTIC_SIGS
{
strobe_t too;
memcpy(too,strobe,sizeof(too));
strobe_put(too,SYM_KEY,my_seckey,EC_PRIVATE_BYTES);
strobe_get(too,HASH,eph_secret,EC_UNIFORM_BYTES);
strobe_destroy(too);
}
#else
TRY( strobe_randomize(eph_secret,EC_PRIVATE_BYTES) );
#endif

/* Nonce = g^eph */
x25519_base_uniform(nonce,resp);
TRY( strobe_put(strobe, SIG_EPH, nonce, EC_PUBLIC_BYTES) );

/* Get the challenge */
strobe_get(strobe, SIG_CHALLENGE, chal, EC_CHALLENGE_BYTES);

/* Respond */
x25519_sign_p2 (resp, chal, eph_secret, my_seckey);
TRY( strobe_put(strobe, SIG_RESPONSE, resp, EC_PRIVATE_BYTES) );

#if EC_UNIFORM_BYTES > EC_PRIVATE_BYTES
/* Doesn't happen for Curve25519, but clear the high bytes of the nonce
* if they're not overwritten. */
memset(resp,0,sizeof(resp));
#endif

return 0;
}
#endif

#if STROBE_CONVENIENCE_ECDH
int strobe_eph_ecdh (
strobe_t strobe,
int i_go_first
) {
uint8_t e_pub[EC_PUBLIC_BYTES], e_sec[EC_PRIVATE_BYTES], e_oth[EC_PUBLIC_BYTES];

/* SEND EPH */
TRY( strobe_randomize(e_sec,sizeof(e_sec)) );
x25519_base(e_pub,e_sec,1);
if (i_go_first)
TRY( strobe_put(strobe, KEM_EPH, e_pub, sizeof(e_pub)) );

/* RECV EPH */
TRY( strobe_get(strobe, KEM_EPH, e_oth, sizeof(e_oth)) );

/* SEND EPH */
if (!i_go_first)
TRY( strobe_put(strobe, KEM_EPH, e_pub, sizeof(e_pub)) );

/* ECDH */
TRY( x25519(e_pub, e_sec, e_oth, 1) );
strobe_operate(strobe, KEM_RESULT, e_pub, sizeof(e_pub));

return 0;
}

#endif // STROBE_CONVENIENCE_ECDH


+ 420
- 0
strobe/strobe.h View File

@@ -0,0 +1,420 @@
/**
* @file strobe.h
* @copyright
* Copyright (c) 2015-2016 Cryptography Research, Inc. \n
* Released under the MIT License. See LICENSE.txt for license information.
* @author Mike Hamburg
* @brief Strobe lite protocol instances.
*/
#ifndef __STROBE_H__
#define __STROBE_H__

/* TODO: Implement state compaction, particularly for PRNG state */
/* TODO: Test this against the Python reference. */

#include <stdint.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include <sys/types.h>

#include "strobe_config.h"

/**
* A control word holds flags and other information that control a STROBE operation.
* Defined below.
*/
typedef uint32_t control_word_t;

/* Strobe object, below */
struct strobe_s;

/** Initialize a STROBE object, using the description as a domain separator. */
void strobe_init (
struct strobe_s *__restrict__ strobe,
const uint8_t *description,
size_t desclen
);

/** Underlying duplex primitive. */
ssize_t strobe_duplex (
struct strobe_s *__restrict__ strobe,
control_word_t flags,
uint8_t *inside,
ssize_t len
);

/**
* More complex duplex primitive.
* First reads/writes metadata based on control_flags, then data. Can pass
* -len instead of len when reading. This means any length up to len.
* Returns the number of data bytes read, or <0 on error.
*/
ssize_t strobe_operate (
struct strobe_s *__restrict__ strobe,
control_word_t control_flags,
uint8_t *inside,
ssize_t len
);

#if STROBE_SUPPORT_PRNG
/** Seed the generator with len bytes of randomness. */
void strobe_seed_prng(const uint8_t *data, ssize_t len);

/**
* Fill *data with len bytes of randomness.
* Return <0 if the generator is not seeded.
*/
int __attribute__((warn_unused_result))
strobe_randomize(uint8_t *data, ssize_t len);
#endif /* STROBE_SUPPORT_PRNG */

/* Flags as defined in the paper */
#define FLAG_I (1<<0) /**< Inbound */
#define FLAG_A (1<<1) /**< Has application-side data (eg, not a MAC) */
#define FLAG_C (1<<2) /**< Uses encryption or rekeying. */
#define FLAG_T (1<<3) /**< Send or receive data via transport */
#define FLAG_M (1<<4) /**< Operation carries metadata. */

#define FLAG_META_I (1<<20) /**< Metadata has I */
#define FLAG_META_A (1<<21) /**< Metadata has A (always set) */
#define FLAG_META_C (1<<22) /**< Metadata has C */
#define FLAG_META_T (1<<23) /**< Metadata has T */
#define FLAG_META_M (1<<24) /**< Metadata has M (always set) */
#define GET_META_FLAGS(cw) (((cw) >> 20) & 0x3F)

#define FLAG_MORE (1<<28) /**< Continue a streaming operation. */
#define FLAG_NO_DATA (1<<29) /**< Just send/recv the metadata, not the data. */

#if STROBE_SUPPORT_FLAG_POST
/**
* Post-op ratchet and/or MAC.
*
* TODO: I might want to remove these, because some details of how this is
* done might be application-specific. In particular, some applications will
* want to frame their MACs on the wire, and some will not.
*/
#define FLAG_POST_RATCHET (1<<30) /**< Ratchet state after */
#define FLAG_POST_MAC (1<<31) /**< Send/receive MAC after */
#endif

/* Operation types as defined in the paper */
#define TYPE_AD FLAG_A /**< Context data, not sent to trensport */
#define TYPE_KEY (FLAG_A | FLAG_C) /**< Symmetric key, not sent to transport */
#define TYPE_CLR (FLAG_T | FLAG_A) /**< Data to be sent in the clear */
#define TYPE_ENC (FLAG_T | FLAG_A | FLAG_C) /**< Data sent encrypted */
#define TYPE_MAC (FLAG_T | FLAG_C) /**< Message authentication code */
#define TYPE_RATCHET FLAG_C /**< Erase data to prevent rollback */
#define TYPE_PRF (FLAG_I | FLAG_A | FLAG_C) /**< Return pseudorandom hash */

/** For operate, have (n)-byte little-endian length field. */
#define CW_LENGTH_BYTES(n) ((uint32_t)(n)<<16)

#define STROBE_CW_GET_LENGTH_BYTES(cw) ((cw)>>16 & 0xF)

#define MAKE_IMPLICIT(cw) ((cw) &~ (FLAG_T | FLAG_META_T))
#define MAKE_LENGTHLESS(cw) ((cw) &~ CW_LENGTH_BYTES(0x0F))

#define GET_CONTROL_TAG(cw) (((cw)>>8)&0xFF)
#define CONTROL_WORD(w,value,flags) enum { w=value<<8|flags|FLAG_META_A|FLAG_META_M }

/* Recommended control words */
/* 0x00-0x0F: symmetric cryptography */
CONTROL_WORD(SYM_SCHEME , 0x00, TYPE_CLR | CW_LENGTH_BYTES(2) | FLAG_META_T );
CONTROL_WORD(SYM_KEY , 0x01, TYPE_KEY );
CONTROL_WORD(APP_PLAINTEXT , 0x02, TYPE_CLR | CW_LENGTH_BYTES(2) | FLAG_META_T );
CONTROL_WORD(APP_CIPHERTEXT , 0x03, TYPE_ENC | CW_LENGTH_BYTES(2) | FLAG_META_T );
CONTROL_WORD(NONCE , 0x04, TYPE_CLR | CW_LENGTH_BYTES(2) | FLAG_META_T );
CONTROL_WORD(AUTH_DATA , 0x05, TYPE_CLR | CW_LENGTH_BYTES(2) | FLAG_META_T );
CONTROL_WORD(MAC , 0x06, TYPE_MAC | CW_LENGTH_BYTES(2) );
CONTROL_WORD(HASH , 0x07, TYPE_PRF | CW_LENGTH_BYTES(2) );
CONTROL_WORD(DERIVE_KEY , 0x08, TYPE_PRF | CW_LENGTH_BYTES(2) );
CONTROL_WORD(BE_SLOW , 0x0C, TYPE_RATCHET | CW_LENGTH_BYTES(4) );
CONTROL_WORD(SIV_PT_INNER , 0x0D, TYPE_CLR ); /* FUTURE: implement SIV */
CONTROL_WORD(SIV_MAC_OUTER , 0x0E, TYPE_CLR );
CONTROL_WORD(RATCHET , 0x0F, TYPE_RATCHET );

/* 0x10-0x1F: Asymmetric key exchange and encryption */
CONTROL_WORD(KEM_SCHEME , 0x10, TYPE_CLR | CW_LENGTH_BYTES(2) | FLAG_META_T );
CONTROL_WORD(PUBLIC_KEY , 0x11, TYPE_CLR | CW_LENGTH_BYTES(2) | FLAG_META_T );
CONTROL_WORD(KEM_EPH , 0x12, TYPE_CLR | CW_LENGTH_BYTES(2) | FLAG_META_T );
CONTROL_WORD(KEM_RESULT , 0x13, TYPE_KEY );

/* 0x18-0x1F: Signatures */
CONTROL_WORD(SIG_SCHEME , 0x18, TYPE_CLR | CW_LENGTH_BYTES(2) | FLAG_META_T );
CONTROL_WORD(SIG_EPH , 0x19, TYPE_CLR | CW_LENGTH_BYTES(2) | FLAG_META_T );
CONTROL_WORD(SIG_CHALLENGE , 0x1A, TYPE_PRF | CW_LENGTH_BYTES(2) );
CONTROL_WORD(SIG_RESPONSE , 0x1B, TYPE_ENC | CW_LENGTH_BYTES(2) | FLAG_META_T );
CONTROL_WORD(SIG_DETERM , 0x1C, TYPE_PRF | CW_LENGTH_BYTES(2) );

/* 0x20-0x2F: header and other metadata */
CONTROL_WORD(HANDSHAKE , 0x20, TYPE_CLR | CW_LENGTH_BYTES(2) | FLAG_META_T );
CONTROL_WORD(VERSION , 0x21, TYPE_CLR | CW_LENGTH_BYTES(2) | FLAG_META_T );
CONTROL_WORD(CIPHERSUITE , 0x22, TYPE_CLR | CW_LENGTH_BYTES(2) | FLAG_META_T );
CONTROL_WORD(META_PLAINTEXT , 0x24, TYPE_CLR | CW_LENGTH_BYTES(2) | FLAG_META_T );
CONTROL_WORD(META_CIPHERTEXT, 0x25, TYPE_CLR | CW_LENGTH_BYTES(2) | FLAG_META_T );
CONTROL_WORD(CERTIFICATE , 0x26, TYPE_CLR | CW_LENGTH_BYTES(2) | FLAG_META_T );
CONTROL_WORD(ENCRYPTED_CERT , 0x27, TYPE_ENC | CW_LENGTH_BYTES(2) | FLAG_META_T );
CONTROL_WORD(OVER , 0x2E, TYPE_MAC | CW_LENGTH_BYTES(2) | FLAG_META_T );
CONTROL_WORD(CLOSE , 0x2F, TYPE_MAC | CW_LENGTH_BYTES(2) | FLAG_META_T );

/* 0x30-0x3F: Certificates.
*
* These are still experimental and unimplemented, and will probably change.
* The intention is that certs should look something like this:
*
* CERT_VERSION 1
* CERT_SERIAL .{0,32} ? # for revocation, else omitted
* CERT_VALIDITY? # omitted if your devices aren't tracking time or can't update
* CERT_PURPOSE .*? # if your application makes such a distinction
* ((CERT_REC_PRE .* CERT_REC_POST .*) | (CERT_NAME .*))
* ^ if the cert is an intermediate ^ if it isn't an intermediate
* (CERT_PK_SCHEME PUBLIC_KEY)+ # Limited to 1? Could have multiple? Dunno.
*
* CERT_COMMENT *
* (SIG_SCHEME SIG_CHAL SIG_EPH SIG_RESPONSE)+ # or similar depending on sig scheme
* ^ Possibly this should be limited to 1.
*
* If your application uses cert chains, they would be given in separate CERTIFICATE
* (or ENCRYPTED_CERT) messages, in order from CA to leaf. At any time, the client
* could track "what's the most recent trusted intermediate which has authority over
* the name I'm trying to contact." Then if there are multiple certifying chains, the
* untrusted ones would be ignored.
*/
CONTROL_WORD(CERT_VERSION , 0x30, TYPE_CLR | CW_LENGTH_BYTES(2) | FLAG_META_T );
CONTROL_WORD(CERT_SERIAL , 0x31, TYPE_CLR | CW_LENGTH_BYTES(2) | FLAG_META_T );
CONTROL_WORD(CERT_VALIDITY , 0x32, TYPE_CLR | CW_LENGTH_BYTES(2) | FLAG_META_T );
CONTROL_WORD(CERT_PURPOSE , 0x33, TYPE_CLR | CW_LENGTH_BYTES(2) | FLAG_META_T );
CONTROL_WORD(CERT_REC_PRE , 0x34, TYPE_CLR | CW_LENGTH_BYTES(2) | FLAG_META_T );
CONTROL_WORD(CERT_REC_POST , 0x35, TYPE_CLR | CW_LENGTH_BYTES(2) | FLAG_META_T );
CONTROL_WORD(CERT_NAME , 0x36, TYPE_CLR | CW_LENGTH_BYTES(2) | FLAG_META_T );
CONTROL_WORD(CERT_PK_SCHEME , 0x37, TYPE_CLR | CW_LENGTH_BYTES(2) | FLAG_META_T );
CONTROL_WORD(CERT_COMMENT , 0x3F, TYPE_CLR | CW_LENGTH_BYTES(2) | FLAG_META_T );

#if STROBE_INTEROP_F_BITS == 1600
#define kword_t uint64_t
#elif STROBE_INTEROP_F_BITS == 800
#define kword_t uint32_t
#elif STROBE_INTEROP_F_BITS == 400
#define kword_t uint16_t
#else
#error "Strobe supports only Keccak-F{400,800,1600}"
#endif

/* IO callback context. Opaque to STROBE. */
typedef struct {
void *a, *b; /**< Two pointers for use by the callback context. */
#if STROBE_IO_CTX_HAS_FD
int fd; /**< A file descriptor, or whatever. */
#endif
} strobe_io_ctx_s;

/** Callback context */
typedef struct {
// FUTURE: make these return two values?
/**
* Read up to [size] bytes of data. Set the buffer to where it
* points, and return how many bytes were actually read.
*/
ssize_t (*read) (strobe_io_ctx_s *ctx, const uint8_t **buffer, ssize_t size);

/**
* The write callback is trickier.
*
* The first call returns a buffer to write the data to.
*
* The next call writes that data out, and returns a new (or more likely,
* the same) buffer.
*/
ssize_t (*write) (strobe_io_ctx_s *ctx, uint8_t **buffer, ssize_t size);
} strobe_io_callbacks_s;
extern const strobe_io_callbacks_s strobe_io_cb_buffer, strobe_io_cb_const_buffer;

/** Keccak's domain: 25 words of size b/25, or b/8 bytes. */
typedef union {
kword_t w[25]; uint8_t b[25*sizeof(kword_t)/sizeof(uint8_t)];
} kdomain_s;

/** The main strobe state object. */
typedef struct strobe_s {
kdomain_s state;
uint8_t position, pos_begin, flags;

const strobe_io_callbacks_s *io;
strobe_io_ctx_s io_ctx;
} strobe_s, strobe_t[1];

#if STROBE_CW_MAX_LENGTH_BYTES <= 1
typedef uint8_t strobe_length_t;
#elif STROBE_CW_MAX_LENGTH_BYTES <= 2
typedef uint16_t strobe_length_t;
#elif STROBE_CW_MAX_LENGTH_BYTES <= 4
typedef uint32_t strobe_length_t;
#elif STROBE_CW_MAX_LENGTH_BYTES <= 8
typedef uint64_t strobe_length_t;
#elif STROBE_CW_MAX_LENGTH_BYTES <= 16
typedef uint128_t strobe_length_t;
#else
#error "Can't deal with >128-bit length fields'"
#endif

typedef struct {
uint8_t control;
strobe_length_t len;
} __attribute__((packed)) strobe_serialized_control_t;

/* Protocol building blocks */
#define TRY(foo) do { ssize_t _ret = (foo); if (_ret < 0) return _ret; } while(0)

/**
* Destroy a STROBE object by writing zeros over it.
* NB: if you don't have C11's memset_s, the compiler might optimize this call
* away!
*/
static inline void strobe_destroy(strobe_t strobe) {
#ifdef __STDC_LIB_EXT1__
memset_s(strobe,sizeof(*strobe),0,sizeof(*strobe));
#else
memset(strobe,0,sizeof(*strobe));
#endif
}

/**
* Detach the I/O from a STROBE object.
*/
static inline void strobe_detach(strobe_t strobe) {
strobe->io = NULL;
/* Not really relevant: */
// strobe->io_ctx.a = strobe->io_ctx.b = NULL;
}

/** Reverse the role of a STROBE object (i.e. to emulate the other guy). */
static inline void strobe_reverse(strobe_t strobe) {
strobe->flags ^= FLAG_I;
}

/** Attach a buffer to a strobe object. */
static inline void strobe_attach_buffer(strobe_t strobe, uint8_t *start, size_t length) {
strobe->io = &strobe_io_cb_buffer;
strobe->io_ctx.a = start;
strobe->io_ctx.b = start+length;
}

/** Attach a buffer to a strobe object. */
static inline void strobe_attach_const_buffer(strobe_t strobe, uint8_t *start, size_t length) {
strobe->io = &strobe_io_cb_const_buffer;
strobe->io_ctx.a = start;
strobe->io_ctx.b = start+length;
}

/** Same as operate, but only for sending data or putting it into the sponge. */
static inline ssize_t strobe_put (
strobe_s *__restrict__ strobe,
control_word_t control_flags,
const uint8_t *inside,
ssize_t len
) {
assert(!(control_flags & (FLAG_M|FLAG_I|FLAG_META_I)));
return strobe_operate(strobe,control_flags,(uint8_t *)inside,len);
}

/** Receive data or extract it from the sponge. */
static inline ssize_t strobe_get (
strobe_s *__restrict__ strobe,
control_word_t control_flags,
uint8_t *inside,
ssize_t len
) {
assert(!(control_flags & FLAG_M));
assert((control_flags & (FLAG_T|FLAG_C)) != 0);
control_flags |= FLAG_I;
if (control_flags & FLAG_META_T) control_flags |= FLAG_META_I;
return strobe_operate(strobe,control_flags,(uint8_t *)inside,len);
}

/* Endian swaps */
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
static inline kword_t eswap_letoh(kword_t w) { return w; }
static inline kword_t eswap_htole(kword_t w) { return w; }
static inline uint16_t eswap_letoh_16(uint16_t w) { return w; }
static inline uint16_t eswap_htole_16(uint16_t w) { return w; }
static inline uint32_t eswap_letoh_32(uint32_t w) { return w; }
static inline uint32_t eswap_htole_32(uint32_t w) { return w; }
static inline uint64_t eswap_letoh_64(uint64_t w) { return w; }
static inline uint64_t eswap_htole_64(uint64_t w) { return w; }
static inline strobe_length_t eswap_letoh_sl(strobe_length_t w) { return w; }
static inline strobe_length_t eswap_htole_sl(strobe_length_t w) { return w; }
#else
#error "Fix eswap() on non-little-endian machine"
#endif

/**
* Receive just control/metadata from the other party.
* This is for complex protocols where you may not know what will come next.
*/
static inline ssize_t strobe_get_control (
strobe_s *__restrict__ strobe,
strobe_serialized_control_t *cw,
uint32_t flags
) {
unsigned int length_bytes = STROBE_CW_GET_LENGTH_BYTES(flags);
control_word_t cwf = GET_META_FLAGS(flags) | FLAG_I | FLAG_T;

cw->len = 0;
ssize_t ret = strobe_duplex(strobe, cwf, (uint8_t *)cw, sizeof(cw->control) + length_bytes);

/* Probably a nop, allowing tailcall, except we're inline anyway */
cw->len = eswap_letoh_sl(cw->len);
return ret;
}

static inline ssize_t strobe_put_mac( strobe_t strobe ) {
return strobe_operate(strobe, MAC, NULL, STROBE_INTEROP_MAC_BYTES);
}

static inline ssize_t strobe_get_mac(strobe_t strobe ) {
return strobe_operate(strobe, MAC|FLAG_I, NULL, STROBE_INTEROP_MAC_BYTES);
}

static inline ssize_t strobe_key (
strobe_t strobe,
control_word_t cw,
const uint8_t *data,
uint16_t len
) {
assert(!(cw & FLAG_T));
return strobe_put(strobe, cw, data, len);
}

#if STROBE_CONVENIENCE_ECDH
int strobe_eph_ecdh (
strobe_t strobe,
int i_go_first
);
#endif

#if X25519_SUPPORT_SIGN
int strobe_session_sign (
strobe_t strobe,
const uint8_t my_seckey[32],
const uint8_t my_pubkey[32]
);
#endif

#if X25519_SUPPORT_VERIFY
int strobe_session_verify (
strobe_t strobe,
const uint8_t their_pubkey[32]
);
#if STROBE_SUPPORT_CERT_VERIFY
/* Parse a signature but don't verify it.
* Useful for intermediate certs we don't trust.
*/
int strobe_session_dont_verify (
strobe_t strobe,
const uint8_t their_pubkey[32]
);
#endif
#endif

#endif /* __STROBE_H__ */

+ 183
- 0
strobe/strobe_config.h View File

@@ -0,0 +1,183 @@
/**
* @file strobe_config.h
* @copyright
* Copyright (c) 2016 Cryptography Research, Inc. \n
* Released under the MIT License. See LICENSE.txt for license information.
* @author Mike Hamburg
* @brief Configuration for STROBE code.
*/

#ifndef __STROBE_CONFIG_H__
#define __STROBE_CONFIG_H__

/****************************************************************/
/* STROBE */
/****************************************************************/

#ifndef STROBE_INTEROP_F_BITS
/** INTEROP: STROBE bit size. Default is Keccak-F800. */
#define STROBE_INTEROP_F_BITS 800
#endif

#ifndef STROBE_INTEROP_V_MAJOR
/** INTEROP: STROBE major version number. */
#define STROBE_INTEROP_V_MAJOR 1
#endif

#ifndef STROBE_INTEROP_V_MINOR
/** INTEROP: STROBE minor version number. */
#define STROBE_INTEROP_V_MINOR 0
#endif

#ifndef STROBE_INTEROP_V_PATCH
/** INTEROP: STROBE patch version number. */
#define STROBE_INTEROP_V_PATCH 2
#endif

#ifndef STROBE_INTEROP_SECURITY_BITS
/**
* INTEROP: STROBE nominal security strength, in bits.
*
* The capacity of the sponge will be 2*STROBE_INTEROP_SECURITY_BITS
* long. Therefore certain security properties will scale better
* than the 128-bit security level implies. In particular, if you
* use 256-bit keys at a 128-bit security level, the 128-bit security
* holds even if the attacker acquires enormous amounts of data.
*/
#define STROBE_INTEROP_SECURITY_BITS 128
#endif

#ifndef STROBE_INTEROP_RATCHET_BYTES
/** INTEROP: number of bytes used by default ratchet operations */
#define STROBE_INTEROP_RATCHET_BYTES (STROBE_INTEROP_SECURITY_BITS/8)
#endif

#ifndef STROBE_SINGLE_THREAD
/**
* If set, assert that STROBE functions (in particular, strobe_randomize)
* will only ever be called by a single thread, so that thread-safety is not
* required.
*/
#define STROBE_SINGLE_THREAD 0
#endif

#ifndef STROBE_IO_CTX_HAS_FD
/** IO contexts has a "file descriptor" pointer (for sockets on a non-embedded system) */
#define STROBE_IO_CTX_HAS_FD 1
#endif

#ifndef STROBE_OPT_FOR_SIZE
/** Global: optimize STROBE code for size at the expense of speed. */
#define STROBE_OPT_FOR_SIZE 0
#endif

#ifndef STROBE_OPT_FOR_SPEED
/** Global: optimize STROBE code for speed at the expense of size. */
#define STROBE_OPT_FOR_SPEED 0
#endif

#ifndef STROBE_SANITY_CHECK_FLAGS
/** On each operation, sanity-check that the flags requested are actually
* implemented, eg that the caller isn't using the MORE flag when the callee
* ifdef'd it out.
*/
#define STROBE_SANITY_CHECK_FLAGS 1
#endif

#ifndef STROBE_SUPPORT_PRNG
/** Support pseudorandom generator.
* Required by A New Hope, convenience ECDH, nondeterministic signing.
*/
#define STROBE_SUPPORT_PRNG 1
#endif

#ifndef STROBE_SUPPORT_FLAG_POST
/** Support experimental post-op flags FLAG_POST_RATCHET, FLAG_POST_MAC */
#define STROBE_SUPPORT_FLAG_POST 1
#endif

#ifndef STROBE_INTEROP_MAC_BYTES
/** The MAC length, used by MAC convenience functions */
#define STROBE_INTEROP_MAC_BYTES 16
#endif

#ifndef STROBE_CW_MAX_LENGTH_BYTES
/** Maximum number of bytes in a length field */
#define STROBE_CW_MAX_LENGTH_BYTES 4
#endif

#ifndef STROBE_CONVENIENCE_ECDH
/** Support convenient strobe_eph_ecdh function.
*
* You might not want this even if you're using ECDH, because
* it implies a particular message flow.
*/
#define STROBE_CONVENIENCE_ECDH 1
#endif

/****************************************************************/
/* X25519 */
/****************************************************************/

#ifndef X25519_SUPPORT_SIGN
/** Support creation of X25519 signatures. NB: these are different from Ed25519 signatures! */
#define X25519_SUPPORT_SIGN 1
#endif

#ifndef X25519_DETERMINISTIC_SIGS
/** Make X25519 signatures deterministic */
#define X25519_DETERMINISTIC_SIGS 1
#endif

#ifndef X25519_SUPPORT_VERIFY
/** Support verification of X25519 signatures. */
#define X25519_SUPPORT_VERIFY X25519_SUPPORT_SIGN
#endif

#ifndef STROBE_EC_SIGN_P1
/** Default sign and verify algorithms. */
#if X25519_SUPPORT_SIGN
#define STROBE_EC_SIGN_P1 x25519_base_uniform
#define STROBE_EC_SIGN_P2 x25519_sign_p2
#endif
#if X25519_SUPPORT_VERIFY
#define STROBE_EC_VERIFY x25519_verify_p2
#endif
#endif

#ifndef STROBE_SUPPORT_CERT_VERIFY
/** Support certificate verify */
#define STROBE_SUPPORT_CERT_VERIFY X25519_SUPPORT_VERIFY
#endif

#ifndef X25519_USE_POWER_CHAIN
/** Use less time and more code for inversion in X25519 */
#define X25519_USE_POWER_CHAIN (!STROBE_OPT_FOR_SIZE)
#endif

#ifndef X25519_WBITS
/** Curve25519: Internal word width for implementation. Should be
* set to the target machine's word size. Supported 16, 32, 64.
*/
#ifdef __SIZEOF_INT128__
#define X25519_WBITS 64
#else
#define X25519_WBITS 32
#endif
#endif

#ifndef X25519_MEMCPY_PARAMS
/** Copy parameters in and out instead of referencing them.
* Required on big-endian systems and those with strong alignment constraints.
*/
#if __ARMEL__ && defined(__ARM_FEATURE_UNALIGNED) && __ARM_FEATURE_UNALIGNED == 0
#define X25519_MEMCPY_PARAMS 1
#elif __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
#define X25519_MEMCPY_PARAMS 0
#else
#define X25519_MEMCPY_PARAMS 1
#endif
#endif

#endif // __STROBE_CONFIG_H__


+ 373
- 0
strobe/test_strobe.c View File

@@ -0,0 +1,373 @@
/**
* @cond internal
* @file test_strobe.c
* @copyright
* Copyright (c) 2016 Cryptography Research, Inc. \n
* Released under the MIT License. See LICENSE.txt for license information.
* @author Mike Hamburg
* @brief Test/example code for STROBE.
*/
#define _GNU_SOURCE 1
#define _XOPEN_SOURCE 700
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/time.h>

#include <fcntl.h>
#include <unistd.h>
#include <errno.h>

#include "x25519.h"
#include "strobe.h"
#include <sys/socket.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include <unistd.h>

/* FUTURE: should these go into header? */
static inline __attribute__((unused))
ssize_t strobe_put_and_steg_mac (
strobe_t strobe,
control_word_t cw,
const uint8_t *data,
ssize_t len,
uint16_t pad
) {
TRY( strobe_put(strobe, cw|FLAG_META_C|FLAG_C, data, len) );
TRY( strobe_put(strobe, MAC|FLAG_META_T|FLAG_META_C, NULL, pad + STROBE_INTEROP_MAC_BYTES) );
return len;
}

static inline __attribute__((unused))
ssize_t strobe_get_and_steg_mac (
strobe_t strobe,
control_word_t cw,
uint8_t *data,
ssize_t len
) {
ssize_t len2;
TRY( len = strobe_get(strobe, cw|FLAG_META_C|FLAG_C, data, len) );
TRY( len2 = strobe_get(strobe, MAC|FLAG_META_T|FLAG_META_C, NULL, -(1<<14)) );
if (len2 < STROBE_INTEROP_MAC_BYTES) return -1;
return len;
}

int strobe_x_mksocket_client (
uint16_t port
) {
struct sockaddr_in addr;

int sock = socket(AF_INET , SOCK_STREAM , 0);
if (sock == -1) { return -1; }
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
addr.sin_family = AF_INET;
addr.sin_port = htons( port );
if (connect(sock , (struct sockaddr *)&addr , sizeof(addr)) < 0) {
close(sock);
return -1;
}
return sock;
}

int strobe_x_mksocket_server (
uint16_t port
) {
struct sockaddr_in addr;
int option = 1;

int sock = socket(AF_INET , SOCK_STREAM , 0);
if (sock == -1) { return -1; }

if(setsockopt(sock, SOL_SOCKET,SO_REUSEADDR,(const char*)&option,sizeof(option)) < 0)
return -1;

addr.sin_addr.s_addr = inet_addr("127.0.0.1");
addr.sin_family = AF_INET;
addr.sin_port = htons( port );
if (bind(sock , (struct sockaddr *)&addr , sizeof(addr)) < 0) {
close(sock);
return -1;
}
if (listen(sock,1)) return -1;
int sock2 = accept(sock,NULL,NULL);
close(sock);
return sock2;
}

// FUTURE: combine sending.
static ssize_t cb_recv(strobe_io_ctx_s *ctx, const uint8_t **buffer, ssize_t size) {
uint8_t *a = ctx->a, *b = ctx->b;

if (size < 0) {
return -1;
} else if (size == 0) {
return 0;
} else if (size > b-a) {
size = b-a;
}

*buffer = a;
ssize_t avail = recv(ctx->fd, a, size, MSG_WAITALL);
if (avail == 0) avail = -1; // Cause an error on end of file

return avail;
}

static ssize_t cb_send(strobe_io_ctx_s *ctx, uint8_t **buffer, ssize_t size) {
(void)size; /* don't care how many bytes you're gonna write */

uint8_t *a = ctx->a, *b = ctx->b;

ssize_t ret;
if (*buffer > a && *buffer <= b) {
TRY(( ret = send(ctx->fd, a, *buffer-a, 0) ));
if (ret != *buffer-a) return -1;
}

*buffer = a;
return b-a;
}

const strobe_io_callbacks_s strobe_x_cb_socket = { cb_recv, cb_send };

static double now(void) {
struct timeval tv;
gettimeofday(&tv, NULL);
return tv.tv_sec + tv.tv_usec/1000000.0;
}

int hexchar(char x) {
if (x>= '0' && x <= '9') return x-'0';
if (x>= 'a' && x <= 'f') return 10 + x-'a';
if (x>= 'A' && x <= 'F') return 10 + x-'A';
return -1;
}

int hex2bin(unsigned char *bin, size_t len, const char *hex) {
if (strlen(hex) != len*2) return -1;
unsigned int i;
int res = 0;
for (i=0; i<2*len; i++) {
int c = hexchar(hex[i]);
if (c<0) return -1;
res = 16*res+c;
if (i%2 == 1) {
*(bin++) = res;
res = 0;
}
}
return 0;
}

static const char *descr = "toy protocol";

uint8_t g_buffer[1024];

static void strobe_x_attach_socket(strobe_t strobe, int sock, uint8_t *buffer, size_t size) {
strobe->io = &strobe_x_cb_socket;
strobe->io_ctx.a = buffer;
strobe->io_ctx.b = buffer + size;
strobe->io_ctx.fd = sock;
}

int strobe_toy_client (
strobe_t strobe,
const uint8_t their_pubkey[32],
int sock
) {
strobe_init(strobe, (const uint8_t *)descr, strlen(descr));
strobe_x_attach_socket(strobe,sock,g_buffer,sizeof(g_buffer));
TRY( strobe_eph_ecdh(strobe, 1) );
TRY( strobe_session_verify(strobe, their_pubkey) );

return 0;
}

int strobe_sym_client_server (
strobe_t strobe,
int sock
) {
const char *descr0="hello", *key="my key";
strobe_init(strobe, (const uint8_t *)descr0, strlen(descr0));
strobe_put(strobe, SYM_KEY, (const uint8_t *)key, strlen(key));
strobe_x_attach_socket(strobe,sock,g_buffer,sizeof(g_buffer));
return 0;
}

int strobe_toy_server (
strobe_t strobe,
const uint8_t my_seckey[32],
int sock
) {
strobe_init(strobe, (const uint8_t *)descr, strlen(descr));
strobe_x_attach_socket(strobe,sock,g_buffer,sizeof(g_buffer));
TRY( strobe_eph_ecdh(strobe, 0) );
uint8_t my_pubkey[32];
x25519_base(my_pubkey, my_seckey,0);
TRY( strobe_session_sign(strobe, my_seckey, my_pubkey) );

return 0;
}

#ifdef TEST_KECCAK
void dokeccak(strobe_t sponge, uint8_t xor);
#endif

int echo_server(strobe_t strobe) {
int ret=0;
ssize_t get = 0;
const char *s_ = "I got your message! It was: ";
size_t off = strlen(s_);
unsigned char buffer[1024+1+off];
memset(buffer, 0, sizeof(buffer));
memcpy(buffer,s_,off);

while (ret >= 0) {
get = strobe_get(strobe,APP_CIPHERTEXT|FLAG_POST_MAC,&buffer[off],-(int)sizeof(buffer)-off);
if (get < 0) { ret = get; break; }
buffer[get+off] = 0;
printf("Received %zd %s\n", get, &buffer[off]);
printf("Sending %zd %s\n", get+off, buffer);

ret = strobe_put(strobe,APP_CIPHERTEXT|FLAG_POST_MAC,buffer,get+off);
}
return ret;
}

int echo_client(strobe_t strobe) {

char *linep = NULL;
size_t linep_size = 0;

int ret=0;
ssize_t get;
unsigned char buffer[1024];

memset(buffer, 0, sizeof(buffer));
while (ret >= 0) {
get = getline(&linep, &linep_size, stdin);
//printf("GET %d\n", get);
if (get <= 0) { ret = get; break; }
if (get > 1024) { ret = -1; break; }
if ((uint16_t)get != (size_t)get) { return -1; }
ret = strobe_put(strobe,APP_CIPHERTEXT|FLAG_POST_MAC,(uint8_t*)linep,get-1);
if (ret < 0) break;
get = strobe_get(strobe,APP_CIPHERTEXT|FLAG_POST_MAC,buffer,1-(int)sizeof(buffer));

if (get < 0) { ret = get; break; }
buffer[get] = 0;
printf("Received %zd %s\n", get, buffer);
}

free(linep);
return ret;
}

int main(int argc, char **argv) {
int ret = 0, sock = 0;

uint8_t pub[32], sec[32], seed[32]={0};

strobe_t strobe;

int randfd = open("/dev/urandom",O_RDONLY);
if (randfd < 0) {
printf("Can't open /dev/urandom: %s\n", strerror(errno));
return -1;
} else if ((ret = read(randfd,seed,sizeof(seed))) != sizeof(seed)) {
printf("Can't read /dev/urandom: %s\n", strerror(errno));
return -1;
}

strobe_seed_prng(seed,sizeof(seed));

if (argc == 3 && !strcmp(argv[1],"--client")) {

if (hex2bin(pub,sizeof(pub),argv[2])) {
printf("bad hex\n");
return -1;
}
sock = strobe_x_mksocket_client(4444);
if (sock < 0) ret = sock;
else ret = strobe_toy_client(strobe,pub,sock);
if (ret >= 0) ret = echo_client(strobe);

} else if (argc == 2 && !strcmp(argv[1],"--sym-client")) {
sock = strobe_x_mksocket_client(4444);
if (sock < 0) ret = sock;
else ret = strobe_sym_client_server(strobe,sock);
if (ret >= 0) ret = echo_client(strobe);

} else if (argc == 2 && !strcmp(argv[1],"--sym-server")) {
sock = strobe_x_mksocket_server(4444);
if (sock < 0) ret = sock;
else ret = strobe_sym_client_server(strobe,sock);
if (ret >= 0) ret = echo_server(strobe);

} else if (argc == 3 && !strcmp(argv[1],"--server")) {
if (hex2bin(sec,sizeof(sec),argv[2])) {
printf("bad hex\n");
return -1;
}

sock = strobe_x_mksocket_server(4444);
if (sock < 0) ret = sock;
else ret = strobe_toy_server(strobe,sec,sock);
if (ret >= 0) ret = echo_server(strobe);

} else if (argc == 2 && !strcmp(argv[1],"--keygen")) {
uint8_t pub[32],sec[32];
if (( ret = strobe_randomize(sec,sizeof(sec)) ) >= 0 ) {
int i;
printf("%s --server ", argv[0]);
for (i=0; i<32; i++) printf("%02x",sec[i]);
printf("\n");
x25519_base(pub,sec,0);
printf("%s --client ", argv[0]);
for (i=0; i<32; i++) printf("%02x",pub[i]);
printf("\n");
return 0;
}
} else if (argc == 2 && !strcmp(argv[1],"--bench")) {
const int BYTES = 10000, ROUNDS = 100;
uint8_t buffer[BYTES];
uint8_t buffer2[BYTES+4];
memset(buffer,0,sizeof(buffer));
strobe_init(strobe,(const unsigned char *)"benching",5);
double t = now();

for (int i=0; i<ROUNDS; i++) {
strobe_attach_buffer(strobe,buffer2,sizeof(buffer2));
int ret = strobe_operate(strobe,APP_CIPHERTEXT,buffer,sizeof(buffer));
if (ret<0) return -1;
}
t = now()-t;
printf("%dB/%0.3fs = %0.3fkB/s\n", BYTES*ROUNDS, t, BYTES*ROUNDS/t/1000);
return 0;
#ifdef TEST_KECCAK
} else if (argc == 2 && !strcmp(argv[1],"--tv")) {
memset(strobe,0,sizeof(strobe));
dokeccak(strobe,0);
for (int i=0; i<25*4; i++)
printf("%02x ", strobe->state->b[i]);
printf("\n");

#endif
} else {
printf(
"Usage: %s --keygen\n"
" %s --client key\n"
" %s --server key\n"
" %s --client-too key\n"
" %s --server-too key\n"
" %s --bench\n",
argv[0],argv[0],argv[0],
argv[0],argv[0],argv[0]
);
return -1;
}
if (sock) close(sock);
printf("ret = %d\n", ret);
return 0;
}

+ 91
- 0
strobe/test_x25519.c View File

@@ -0,0 +1,91 @@
/**
* @cond internal
* @file test_x25519.c
* @copyright
* Copyright (c) 2016 Cryptography Research, Inc. \n
* Released under the MIT License. See LICENSE.txt for license information.
* @author Mike Hamburg
* @brief Tests for x25519 key exchange and signatures.
*/
#include "x25519.h"
#include "strobe_config.h"
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>

static void __attribute__((unused))
randomize(uint8_t foo[X25519_BYTES]) {
unsigned i;
static unsigned int seed = 0x12345678;

for (i=0; i<X25519_BYTES; i++) {
seed += seed*seed | 5;
foo[i] = seed>>24;
}
}

int main(int argc, char **argv) {
(void)argc; (void)argv;

int i;

unsigned char
secret1[X25519_BYTES],
public1[X25519_BYTES],
secret2[X25519_BYTES],
public2[X25519_BYTES],
shared1[X25519_BYTES],
shared2[X25519_BYTES];

for (i=0; i<1000; i++) {
randomize(secret1);
x25519_base(public1,secret1,i%2);

randomize(secret2);
x25519_base(public2,secret2,i%2);

x25519(shared1,secret1,public2,i%2);
x25519(shared2,secret2,public1,i%2);

if (memcmp(shared1,shared2,sizeof(shared1))) {
printf("FAIL shared %d\n",i);
}
}

#if X25519_SUPPORT_SIGN && X25519_SUPPORT_VERIFY
unsigned char
eph_secret[X25519_BYTES],
eph_public[X25519_BYTES],
challenge[X25519_BYTES],
response[X25519_BYTES];
for (i=0; i<1000; i++) {
randomize(secret1);
x25519_base(public1,secret1,0);
randomize(eph_secret);
x25519_base(eph_public,eph_secret,0);
randomize(challenge);
x25519_sign_p2(response,challenge,eph_secret,secret1);
if (0 != x25519_verify_p2(response,challenge,eph_public,public1)) {
printf("FAIL sign %d\n",i);
}

challenge[4] ^= 1;
if (0 == x25519_verify_p2(response,challenge,eph_public,public1)) {
printf("FAIL unsign %d\n",i);
}
}
#endif

unsigned char base[X25519_BYTES] = {9};
unsigned char key[X25519_BYTES] = {9};
unsigned char *b = base, *k = key, *tmp;

for (i=0; i<1000; i++) {
x25519(b,k,b,1);
tmp = b; b = k; k = tmp;
}
for (i=0; i<X25519_BYTES; i++) printf("%02x", k[i]);
printf("\n");
return 0;
}

+ 25
- 0
strobe/www/code/index.html View File

@@ -0,0 +1,25 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Strobe protocol framework</title>
<link rel="stylesheet" type="text/css" href="/style.css"/>
</head>
<body>
<h1><a href="/"><span class="sc">Strobe</span> protocol framework</a></h1>
<div id="nav">
<a href="/">overview</a>
<a href="/specs/">specification</a>
<a href="/examples/">example protocols</a>
<a class="here" href="/code/">code</a>
<a href="/papers/">papers</a>
</div>

<h2>Get code from Sourceforge</h2>
<p>You can get the Strobe code from the SourceForge <a href="https://sourceforge.net/p/strobe/code/ci/master/tree/">
git repository</a> by running:
</p>
<p>
<code>git clone https://git.code.sf.net/p/strobe/code strobe-code</code>
</p>
</body>

+ 103
- 0
strobe/www/examples/aead/index.html View File

@@ -0,0 +1,103 @@
<html>
<head>
<title>Strobe protocol framework</title>
<link rel="stylesheet" type="text/css" href="/style.css"/>
</head>
<body>
<h1><a href="/"><span class="sc">Strobe</span> protocol framework</a></h1>
<div id="nav">
<a href="/">overview</a>
<a href="/specs/">specification</a>
<a class="here" href="/examples/">example protocols</a>
<a href="/code/">code</a>
<a href="/papers/">papers</a>
</div>

<h2>Protocol examples: AEAD</h2>
<h2>Table of Contents</h2>
<div class="toc">
<h2><a href="#version">Version</a></h2>
<h2><a href="#goals">Goals</a></h2>
<h2><a href="#sep">Domain separation string</a></h2>
<h2><a href="#seq">Sequence of operations</a></h2>
<h2><a href="#sec">Security requirements</a></h2>
<h3><a href="#sec.capacity">Capacity</a></h3>
<h3><a href="#sec.entropy">Key entropy</a></h3>
<h3><a href="#sec.unique">Uniqueness</a></h3>
<h2><a href="#claim">Security claim</a></h2>
<h2><a href="#comp">Composition</a></h2>
</div>
<h2 id="version">Version</h2>
<p>This is version 1 of the AEAD example protocol.</p>
<h2 id="goals">Goals</h2>
<p>This protocol transmits any number of authenticated plaintext data and any number of encrypted messages.
It authenticates them with any positive number of keys, which in most use cases will be one.
</p>
<p>
Several of the operations may be either untransmitted, transmitted without framing information, or
transmitted with framing information. These are written as <code>meta-AD/CLR</code> and <code>AD/CLR</code>
operations. The protocol is secure with any combination of transmitted and untransmitted information
in any order. If the recipient uses a different combination of transmitting and not transmitting, then
the message will fail to decrypt correctly (that is, the MAC check will fail with high probability).
</p>
<h2 id="sep">Domain separation string</h2>
<p>The domain separation string for this protocol is <code>"<a href="https://strobe.sourceforge.io/examples/aead">https://strobe.sourceforge.io/examples/aead</a>"</code>.</p>
<h2 id="seq">Sequence of operations</h2>
<p>The protocol consists of the following operations:</p>
<ul><li>One or more <code>KEY</code> operations, with the <code>SYM_KEY = 0x01</code> tag: <pre>(meta-AD(0x01); KEY(key))+</pre></li>
<li>Zero or more <code>VERSION</code> operations, with the <code>VERSION = 0x21</code> tag and exactly 2 length bytes. This protocol specification is version 0x01:
<pre>(meta-AD/CLR(0x21 0x01 0x00); AD/CLR(0x01))+</pre>
</li>
<li>Zero or more <code>NONCE</code> operations, with the <code>NONCE = 0x04</code> tag and any number of length bytes.
Also, zero or more <code>AUTH_DATA</code> operations, with the <code>AUTH_DATA = 0x05</code> tag and any number of length bytes. The <code>AUTH_DATA</code> operations may be mixed in arbitrary order with the nonce(s): <pre>( meta-AD/CLR(0x05 .. length); AD/CLR(ad)
| meta-AD/CLR(0x04 .. length); AD/CLR(nonce)
)*</pre>
If the metadata for an AD or nonce is transmitted, then the AD or nonce must also be transmitted.</li>
<li>Zero or more <code>APP_CIPHERTEXT</code> operations, with the <code>APP_CIPHERTEXT = 0x03</code> tag and any number of length bytes: <pre>(meta-AD/CLR(0x03 .. length); ENC(data))*</pre></li>
<li>Exactly one <code>MAC</code> operation, with the <code>MAC = 0x06</code> tag and exactly 2 length bytes:
<pre>meta-AD/CLR(0x06, length low, length high); MAC()</pre>
The MAC must be at least 8 bytes (64 bits) long, but 128 bytes is recommended.
</li>
</ul>
<h2 id="sec">Security requirements</h2>
<h3 id="sec.capacity">Capacity</h3>
<p>The capacity of the sponge must be at least 2<var>&lambda;</var> bits, where <var>&lambda;</var> is the desired security level. For 128-bit security, the capacity must be 32 bytes (256 bits) or more.
</p>
<h3 id="sec.entropy">Key entropy</h3>
<p>The keys must be drawn from a set which is hard to guess. We recommend one key which is uniformly random and 32 bytes (256 bits) long, but 16 bytes (128 bits) is acceptable for most use cases. The keys must be kept secret from the adversary. If the adversary can guess the keys, then all security will be lost.</p>
<h3 id="sec.unique">Uniqueness</h3>
<p>The (keys,version,nonces,auth_datas) tuple must be unique. Otherwise, an adversary can learn the encrypted messages, but still can't forge MACs. <b>This construction is not nonce-misuse resistant.</b></p>
<h2 id="claim">Security claim</h2>
<p>If the security requirements are observed, then the system is IND-CCA2 secure. This means that an adversary cannot distinguish between encrypted messages that have the same length. The adversary can learn the length of the message. If a tuple of messages is sent, then the adversary can learn the length of the messages if and only if the length framing is sent. Furthermore, the adversary cannot forge MACs, except by random chance (i.e. with probability 256<sup>-MAC length</sup>).
</p>
<p>The adversary can gain an advantage by collecting data (possibly across multiple encrypted messages) and by doing computation. The advantage is <var>&epsilon;</var> &lt; (<var>N</var>/2<sup><var>&lambda;</var></sup>)<sup>2</sup>, where <var>N</var> is the number of times the adversary calls <var>F</var>, plus the number of times someone else calls <var>F</var> and the adversary collects the results.
</p>
<p>The adversary can also break all security by guessing the keys, which will happen after <var>N</var> work with probability <var>N</var><var>D</var>/2<sup><var>K</var></sup>, where <var>D</var> is the number of encrypted messages with different keys but the same (nonces,ADs) that the adversary can collect, and <var>K</var> is the min-entorpy of the key space.
</p>
<h2 id="comp">Composition</h2>
<p>This protocol may be composed before or after any number of other protocols, using an operation
<pre>meta-AD/CLR(0x00 .. length); AD/CLR(<var>sep</var>)</pre>, where <var>sep</var>
is the domain separation string <code>"https://strobe.sourceforge.io/examples/aead"</code>.
Larger protocols may instead assign other (e.g., shorter) separation strings, or omit them
if the use of this protocol is clear from context.
When running a second instance of this protocol following the first, this operation may be omitted.
</p>
<p>If a previous protocol has set one or more keys, then the <code>KEY</code> component of this may be omitted.
It will then rely on the security of the previously-set keys.
</p>
<p>
If in a previous protocol, this party has sent messages (or absorbed AD) which it knows is unique, then
this satisfies the (keys,version,nonces,auth_datas) uniqueness requirement. Messages sent by the other party
also satisfy this. But because it is often hard to tell if the other party's messages have been replayed,
applications SHOULD NOT rely on this.
</p>
</body>

+ 21
- 0
strobe/www/examples/index.html View File

@@ -0,0 +1,21 @@
<html>
<head>
<title>Strobe protocol framework</title>
<link rel="stylesheet" type="text/css" href="/style.css"/>
</head>
<body>
<h1><a href="/"><span class="sc">Strobe</span> protocol framework</a></h1>
<div id="nav">
<a href="/">overview</a>
<a href="/specs/">specification</a>
<a class="here" href="/examples/">example protocols</a>
<a href="/code/">code</a>
<a href="/papers/">papers</a>
</div>

<h2>Protocol examples</h2>
<ul>
<li><a href="/examples/aead/">Authenticated encryption with associated data</a></li>
</ul>
</body>

+ 80
- 0
strobe/www/index.html View File

@@ -0,0 +1,80 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Strobe protocol framework</title>
<link rel="stylesheet" type="text/css" href="/style.css"/>
</head>
<body>
<h1><a href="/"><span class="sc">Strobe</span> protocol framework</a></h1>
<div id="nav">
<a href="/" class="here">overview</a>
<a href="/specs/">specification</a>
<a href="/examples/">example protocols</a>
<a href="/code/">code</a>
<a href="/papers/">papers</a>
</div>
<h2>Version and changelog</h2>
<p>This is version 1.0.2 of the <span class="sc">Strobe</span> specification.
The software is in alpha.
</p>
<ul>
<li>January 24, 2017: version 1.0.2. Fix the length of <var>S</var> in
the cSHAKE domain separation string. Hopefully the last change
for this silly reason.</li>
<li>January 6, 2017: version 1.0.1. Adjust, hopefully, to the final version
of the NIST cSHAKE standard. The difference is how the empty
personalization string is encoded, and in the order of the <var>N</var>
and <var>S</var> strings. The draft was ambiguous, but <var>N</var>
followed <var>S</var> and the empty string was probably best interpreted
as <code>[0]</code>. The final version
changed it to <code>[1,0]</code> with <var>N</var> preceding <var>S</var>.
I'm still not sure I got it right because there are no test vectors.</li>
<li>January 3, 2017: version 1.0.0.</li>
</ul>
<h2>Goals</h2>
<p>
The Internet of Things (IoT) promises ubiquitous, cheap, connected devices.
Unfortunately, most of these devices are hastily developed and will never
receive code updates. Part of the IoT's security problem is cryptographic,
but established cryptographic solutions seem too heavy or too inflexible
to adapt to new use cases.
</p>
<p>
<span class="sc">Strobe</span> is a new framework for cryptographic
protocols. It can also be used for regular encryption. Its goals are
to make cryptographic protocols much simpler to develop, deploy and analyze;
and to fit into even tiny IoT devices. To that end, it uses only one block
function &mdash; <span class="sc">Keccak</span>-<i>f</i> &mdash; to encrypt
and authenticate messages.
</p>
<p>
Flexibility is an important goal of <span class="sc">Strobe</span>. It isn't
just a replacement for TLS. I specifically designed it to support
a wide variety of protocol building blocks: authenticated DH or FHMQV,
signatures, password-authenticated key exchange, DPA-resistant key diversification,
ratcheting for forward secrecy, and steganographic connections with length hiding.
</p>
<p>
Performance is a secondary goal. <span class="sc">Strobe</span> is based
on SHA-3, or rather <span class="sc">Keccak</span>-<i>f</i> and cSHAKE
(draft NIST SP 800-185). SHA-3 is a very conservative design. It doesn't
yet have acceleration on most CPUs, and it isn't the fastest algorithm around.
That said, <span class="sc">Strobe</span> is generic and could be rebuilt
around a faster permutation once one appears.
</p>
<h2>Non-goals</h2>
<p>
Any framework has some rails. <span class="sc">Strobe</span>'s main rails
are around message flow. As a protocol framework, it isn't designed to handle
unreliable or out-of-order message delivery. It can still be used as an
authenticated cipher, hash function, key derivation function etc. in these protocols.
</p>
<p>
<span class="sc">Strobe</span> isn't inherently nonce-misuse resistant.
However, it can be used in an SIV construction to add this property.
</p>
</body>
</html>

+ 39
- 0
strobe/www/papers/index.html View File

@@ -0,0 +1,39 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Strobe protocol framework</title>
<link rel="stylesheet" type="text/css" href="/style.css"/>
</head>
<body>
<h1><a href="/"><span class="sc">Strobe</span> protocol framework</a></h1>
<div id="nav">
<a href="/">overview</a>
<a href="/specs/">specification</a>
<a href="/examples/">example protocols</a>
<a href="/code/">code</a>
<a class="here" href="/papers/">papers</a>
</div>

<h2>Paper</h2>
<p><a href="strobe-latest.pdf">Here</a> is the current version
of the <span class="sc">Strobe</span> paper. It is also <a href="https://eprint.iacr.org/2017/003">available on ePrint</a>. Revision history:
</p>
<ul>
<li>November 14, 2019: <a href="strobe-20191114.pdf">Typo correction, thanks Isis Lovecruft.</a>.
<br/><span class="sha">0a10255762507ea48e7ce11c2be83dcc52044be55f690498974a17c40fd00436</span></li>
<li>January 30, 2017: <a href="strobe-20170130.pdf">Revision to reflect the final cSHAKE, and editorial fixes</a>.
<br/><span class="sha">c08c5f1b1dbbff580526dbbee84c97487883ff7adf2eaa01450cb190e59e01f1</span></li>
<li>January 3, 2017: <a href="strobe-20170103.pdf">first camera-ready release</a>.
<br/><span class="sha">faeebcc40b83a23aa5136e57e4ee1e6112077b22be54cc335c5a22e095776b0a</span></li>
</ul>

<h2>Slides</h2>
<ul>
<li>January 4, 2017: <a href="rwc2017-no-animations.pdf">Real World Crypto 2017 slides (no animations)</a>.
<span class="sha">512448c5daea6b6446510d782f3c17754927950ecd64289bb4b0d67cded3c704</span></li>
<li>January 4, 2017: <a href="rwc2017-animations.pdf">Real World Crypto 2017 slides (with animations)</a>.
<span class="sha">38e85fb3c13225f36c2f58e1ffc899b20be30ee4a45e3d7f02f24c5d417f4777</span>
</li>
</ul>
</body>

BIN
strobe/www/papers/rwc2017-animations.pdf View File


BIN
strobe/www/papers/rwc2017-no-animations.pdf View File


BIN
strobe/www/papers/strobe-20170103.pdf View File


BIN
strobe/www/papers/strobe-20170130.pdf View File


BIN
strobe/www/papers/strobe-20191114.pdf View File


+ 1
- 0
strobe/www/papers/strobe-latest.pdf View File

@@ -0,0 +1 @@
strobe-20191114.pdf

+ 1058
- 0
strobe/www/specs/index.html
File diff suppressed because it is too large
View File


BIN
strobe/www/strobe-20170103.pdf View File


+ 260
- 0
strobe/www/style.css View File

@@ -0,0 +1,260 @@
span.sc {
font-variant: small-caps;
}


html {
background: #bcf;
font: 1em "Helvetica Neue",Helvetica,sans-serif;
line-height: 1.6;
overflow-y: scroll;
overflow-x: auto;
height: 100%;
}

h1 {
font-size: 2.6em;
font-weight: normal;
padding: 6px;
margin: 0px -70px 0px -70px;
text-align: center;
}

table {
max-width: 400px;
margin: 0px auto;
background: #f8f8ff;
border: 1px solid #555;
}
th {
padding: 0.1em 0.5em;
background: #bcf;
}
tr.rule {
height: 10px;
padding: 0px;
display: block;
background: black;
}
td {
padding: 0em 0.1em;
}


h2 {
margin-top: 0.8em;
font-size: 1.8em;
font-weight: normal;
}

h3,h4 {
margin-top: 0.8em;
font-size: 1.8em;
font-weight: normal;
}

div#nav {
margin: 5px -70px 20px -70px;
padding: 0.5em;
background: #dde5ff;
text-align: center;
font-size: 0.9em;
vertical-align: middle;
}

pre {
font: 1em "Courier",mono;
margin: 0px;
display: block;
padding: 0.5em;
background: #fffff8;
border: 1px solid black;
}

span.inst {
display: block;
color: #080;
border: 1px solid #080;
padding: 0.2em 2em;
background: #dfd;
}

/*
@font-face {
font-family: "Computer Modern";
src: url('https://mirrors.ctan.org/fonts/cm-unicode/fonts/otf/cmunss.otf');
}
@font-face {
font-family: "Computer Modern";
src: url('https://mirrors.ctan.org/fonts/cm-unicode/fonts/otf/cmunsx.otf');
font-weight: bold;
}
@font-face {
font-family: "Computer Modern";
src: url('https://mirrors.ctan.org/fonts/cm-unicode/fonts/otf/cmunsi.otf');
font-style: italic, oblique;
}
@font-face {
font-family: "Computer Modern";
src: url('https://mirrors.ctan.org/fonts/cm-unicode/fonts/otf/cmunbxo.otf');
font-weight: bold;
font-style: italic, oblique;
}
*/

.self {
/* display: inline-block;
overflow: hidden;
max-width: 1px;
height: 0.8em;
margin-right: -1px;*/
color: #800;
font-style: normal;
}

.toc :after {
counter-reset: h2 h3 h4;
}
.toc h2, .toc h3, .toc h4 {
font-size: 1em;
margin: 0px;
}
.toc h2 { padding-left: 0em; }
.toc h3 { padding-left: 2em; }
.toc h4 { padding-left: 4em; }
.toc a { color: black; }

.toc ~ h2, .toc > h2 {
counter-increment: h2;
counter-reset: h3 h4;
}
h3 {
counter-increment: h3;
counter-reset: h4;
}
h4 {
counter-increment: h4;
}
.toc ~ h2:before, .toc > h2:before {
content: counter(h2) ". ";
}
h3:before {
content: counter(h2) "." counter(h3) ". ";
}
h4:before {
content: counter(h2) "." counter(h3) "." counter(h4) ". ";
}


var {
/*font: 1.1em "Computer Modern";
font-style: italic;
color: #a00;
*/
font: 1.0em "Courier",mono;
font-style: italic;
color: #00a;
}

.codecomment {
color: #888;
}

.comment:before {
display: block;
text-align: center;
background: #333;
color: white;
position: absolute;
font-size: 0.7em;
top: 0em;
left: 0em;
right: 0em;
content: "Note:";
}
.warning {
display: block;
color: #600;
border: 1px solid #600;
padding: 1.5em 1em 0.3em 1em;
margin: 0.2em 0em;
position: relative;
background: #f8dddd;
}
.warning:before {
display: block;
text-align: center;
background: #600;
color: white;
position: absolute;
font-size: 0.7em;
top: 0em;
left: 0em;
right: 0em;
content: "Warning!";
}
.comment {
display: block;
color: #333;
border: 1px solid #333;
padding: 1.5em 1em 0.3em 1em;
margin: 0.2em 0em;
position: relative;
background: #eee;
}
.impl {
display: block;
color: #406;
border: 1px solid #406;
padding: 0.3em 1em 0.3em 1em;
margin: 0.2em 0em;
position: relative;
background: #dce;
}

#nav a.here { color: #0a0; }
#nav a { margin: 0px 1em;}
h1 a, #nav a { color: black; }
a, h1 a:hover { text-decoration: none; }
a:hover { text-decoration: underline; }

body {
width: 700px;
padding: 0px 70px 50px 70px;
margin: 0 auto;
position: relative;
overflow: hidden;
background: #f9f9ff;
min-height: 100%;
}

span.sha:before {
content: "SHA256:";
margin-right: 0.1em;
font: 0.9em "Courier",mono;
}
span.sha {
display: block;
margin-left: 2em;
font: 0.9em "Courier",mono;
padding: 0.1em;
}

code {
font: 1em "Courier",mono;
display: inline-block;
/*
border: 1px solid #888;
padding: 1px 3px;
border-radius: 3px;
background: #ddd;
*/
}

ul,ol { padding-left: 2em; }
ul.wide li { margin-bottom: 1em; }

* { margin: 0px; padding: 0px; }

/*p { text-align: justify; }*/
p+p { margin-top: 1em; }

+ 437
- 0
strobe/x25519.c View File

@@ -0,0 +1,437 @@
/**
* @cond internal
* @file x25519.c
* @copyright
* Copyright (c) 2015-2016 Cryptography Research, Inc. \n
* Released under the MIT License. See LICENSE.txt for license information.
* @author Mike Hamburg
* @brief Key exchange and signatures based on X25519.
*/
#include <stdint.h>
#include "x25519.h"
#include "strobe.h"
#include "strobe_config.h"

#if X25519_WBITS == 64
typedef uint64_t limb_t;
typedef __uint128_t dlimb_t;
typedef __int128_t sdlimb_t;
#define eswap_limb eswap_letoh_64
#define LIMB(x) x##ull
#elif X25519_WBITS == 32
typedef uint32_t limb_t;
typedef uint64_t dlimb_t;
typedef int64_t sdlimb_t;
#define eswap_limb eswap_letoh_32
#define LIMB(x) (uint32_t)(x##ull),(uint32_t)((x##ull)>>32)
#else
#error "Need to know X25519_WBITS"
#endif

#define NLIMBS (256/X25519_WBITS)
typedef limb_t fe[NLIMBS];

#if X25519_SUPPORT_SIGN
typedef limb_t scalar_t[NLIMBS];
static const limb_t MONTGOMERY_FACTOR = (limb_t)0xd2b51da312547e1bull;
static const scalar_t sc_p = {
LIMB(0x5812631a5cf5d3ed), LIMB(0x14def9dea2f79cd6),
LIMB(0x0000000000000000), LIMB(0x1000000000000000)
}, sc_r2 = {
LIMB(0xa40611e3449c0f01), LIMB(0xd00e1ba768859347),
LIMB(0xceec73d217f5be65), LIMB(0x0399411b7c309a3d)
};
#endif

static inline limb_t umaal(
limb_t *carry, limb_t acc, limb_t mand, limb_t mier
) {
dlimb_t tmp = (dlimb_t) mand * mier + acc + *carry;
*carry = tmp >> X25519_WBITS;
return tmp;
}

/* These functions are implemented in terms of umaal on ARM */
static inline limb_t adc(limb_t *carry, limb_t acc, limb_t mand) {
dlimb_t total = (dlimb_t)*carry + acc + mand;
*carry = total>>X25519_WBITS;
return total;
}

static inline limb_t adc0(limb_t *carry, limb_t acc) {
dlimb_t total = (dlimb_t)*carry + acc;
*carry = total>>X25519_WBITS;
return total;
}

/* Precondition: carry is small.
* Invariant: result of propagate is < 2^255 + 1 word
* In particular, always less than 2p.
* Also, output x >= min(x,19)
*/
static void propagate(fe x, limb_t over) {
unsigned i;
over = x[NLIMBS-1]>>(X25519_WBITS-1) | over<<1;
x[NLIMBS-1] &= ~((limb_t)1<<(X25519_WBITS-1));

limb_t carry = over * 19;
for (i=0; i<NLIMBS; i++) {
x[i] = adc0(&carry, x[i]);
}
}

static void add(fe out, const fe a, const fe b) {
unsigned i;
limb_t carry = 0;
for (i=0; i<NLIMBS; i++) {
out[i] = adc(&carry, a[i], b[i]);
}
propagate(out,carry);
}

static void sub(fe out, const fe a, const fe b) {
unsigned i;
sdlimb_t carry = -38;
for (i=0; i<NLIMBS; i++) {
out[i] = carry = carry + a[i] - b[i];
carry >>= X25519_WBITS;
}
propagate(out,1+carry);
}

static void __attribute__((unused))
swapin(limb_t *x, const uint8_t *in) {
memcpy(x,in,sizeof(fe));
unsigned i;
for (i=0; i<NLIMBS; i++) {
x[i] = eswap_limb(x[i]);
}
}

static void __attribute__((unused))
swapout(uint8_t *out, limb_t *x) {
unsigned i;
for (i=0; i<NLIMBS; i++) {
x[i] = eswap_limb(x[i]);
}
memcpy(out,x,sizeof(fe));
}

static void mul(fe out, const fe a, const fe b, unsigned nb) {
/* GCC at least produces pretty decent asm for this, so don't need to have dedicated asm. */
limb_t accum[2*NLIMBS] = {0};
unsigned i,j;

limb_t carry2;
for (i=0; i<nb; i++) {
carry2 = 0;
limb_t mand = b[i];
for (j=0; j<NLIMBS; j++) {
accum[i+j] = umaal(&carry2, accum[i+j], mand, a[j]);
}
accum[i+j] = carry2;
}

carry2 = 0;
const limb_t mand = 38;
for (j=0; j<NLIMBS; j++) {
out[j] = umaal(&carry2, accum[j], mand, accum[j+NLIMBS]);
}
propagate(out,carry2);
}

static void sqr(fe out, const fe a) { mul(out,a,a,NLIMBS); }
static void mul1(fe out, const fe a) { mul(out,a,out,NLIMBS); }
static void sqr1(fe a) { mul1(a,a); }

static void condswap(limb_t a[2*NLIMBS], limb_t b[2*NLIMBS], limb_t doswap) {
unsigned i;
for (i=0; i<2*NLIMBS; i++) {
limb_t xor = (a[i]^b[i]) & doswap;
a[i] ^= xor; b[i] ^= xor;
}
}

static limb_t canon(fe x) {
/* Canonicalize a field element x, reducing it to the least residue
* which is congruent to it mod 2^255-19.
*
* Precondition: x < 2^255 + 1 word
*/

/* First, add 19. */
unsigned i;
limb_t carry0 = 19;
for (i=0; i<NLIMBS; i++) {
x[i] = adc0(&carry0, x[i]);
}
propagate(x,carry0);

/* Here, 19 <= x2 < 2^255
*
* This is because we added 19, so before propagate it can't be less than 19.
* After propagate, it still can't be less than 19, because if propagate does
* anything it adds 19.
*
* We know that the high bit must be clear, because either the input was
* ~ 2^255 + one word + 19 (in which case it propagates to at most 2 words)
* or it was < 2^255.
*
* So now, if we subtract 19, we will get back to something in [0,2^255-19).
*/
sdlimb_t carry = -19;
limb_t res = 0;
for (i=0; i<NLIMBS; i++) {
res |= x[i] = carry += x[i];
carry >>= X25519_WBITS;
}
return ((dlimb_t)res - 1) >> X25519_WBITS;
}

static const limb_t a24[1]={121665};

static void ladder_part1(fe xs[5]) {
limb_t *x2 = xs[0], *z2=xs[1],*x3=xs[2],*z3=xs[3],*t1=xs[4];
add(t1,x2,z2); // t1 = A
sub(z2,x2,z2); // z2 = B
add(x2,x3,z3); // x2 = C
sub(z3,x3,z3); // z3 = D
mul1(z3,t1); // z3 = DA
mul1(x2,z2); // x3 = BC
add(x3,z3,x2); // x3 = DA+CB
sub(z3,z3,x2); // z3 = DA-CB
sqr1(t1); // t1 = AA
sqr1(z2); // z2 = BB
sub(x2,t1,z2); // x2 = E = AA-BB
mul(z2,x2,a24,sizeof(a24)/sizeof(a24[0])); // z2 = E*a24
add(z2,z2,t1); // z2 = E*a24 + AA
}
static void ladder_part2(fe xs[5], const fe x1) {
limb_t *x2 = xs[0], *z2=xs[1],*x3=xs[2],*z3=xs[3],*t1=xs[4];
sqr1(z3); // z3 = (DA-CB)^2
mul1(z3,x1); // z3 = x1 * (DA-CB)^2
sqr1(x3); // x3 = (DA+CB)^2
mul1(z2,x2); // z2 = AA*(E*a24+AA)
sub(x2,t1,x2); // x2 = BB again
mul1(x2,t1); // x2 = AA*BB
}

static void x25519_core(fe xs[5], const uint8_t scalar[X25519_BYTES], const uint8_t *x1, int clamp) {
int i;
#if X25519_MEMCPY_PARAMS
fe x1i;
swapin(x1i,x1);
x1 = (const uint8_t *)x1;
#endif
limb_t swap = 0;
limb_t *x2 = xs[0],*x3=xs[2],*z3=xs[3];
memset(xs,0,4*sizeof(fe));
x2[0] = z3[0] = 1;
memcpy(x3,x1,sizeof(fe));

for (i=255; i>=0; i--) {
uint8_t bytei = scalar[i/8];
if (clamp) {
if (i/8 == 0) {
bytei &= ~7;
} else if (i/8 == X25519_BYTES-1) {
bytei &= 0x7F;
bytei |= 0x40;
}
}
limb_t doswap = -(limb_t)((bytei>>(i%8)) & 1);
condswap(x2,x3,swap^doswap);
swap = doswap;

ladder_part1(xs);
ladder_part2(xs,(const limb_t *)x1);
}
condswap(x2,x3,swap);
}

int x25519(uint8_t out[X25519_BYTES], const uint8_t scalar[X25519_BYTES], const uint8_t x1[X25519_BYTES], int clamp) {
fe xs[5];
x25519_core(xs,scalar,x1,clamp);

/* Precomputed inversion chain */
limb_t *x2 = xs[0], *z2=xs[1], *z3=xs[3];
int i;

limb_t *prev = z2;
#if X25519_USE_POWER_CHAIN
static const struct { uint8_t a,c,n; } steps[13] = {
{2,1,1 },
{2,1,1 },
{4,2,3 },
{2,4,6 },
{3,1,1 },
{3,2,12 },
{4,3,25 },
{2,3,25 },
{2,4,50 },
{3,2,125},
{3,1,2 },
{3,1,2 },
{3,1,1 }
};
for (i=0; i<13; i++) {
int j;
limb_t *a = xs[steps[i].a];
for (j=steps[i].n; j>0; j--) {
sqr(a, prev);
prev = a;
}
mul1(a,xs[steps[i].c]);
}
#else
/* Raise to the p-2 = 0x7f..ffeb */
for (i=253; i>=0; i--) {
sqr(z3,prev);
prev = z3;
if (i>=8 || (0xeb>>i & 1)) {
mul1(z3,z2);
}
}
#endif

/* Here prev = z3 */
/* x2 /= z2 */
#if X25519_MEMCPY_PARAMS
mul1(x2,z3);
int ret = canon(x2);
swapout(out,x2);
#else
mul((limb_t *)out, x2, z3, NLIMBS);
int ret = canon((limb_t*)out);
#endif
if (clamp) return ret;
else return 0;
}

const uint8_t X25519_BASE_POINT[X25519_BYTES] = {9};

#if X25519_SUPPORT_VERIFY
static limb_t x25519_verify_core(
fe xs[5],
const limb_t *other1,
const uint8_t other2[X25519_BYTES]
) {
limb_t *z2=xs[1],*x3=xs[2],*z3=xs[3];
#if X25519_MEMCPY_PARAMS
fe xo2;
swapin(xo2,other2);
#else
const limb_t *xo2 = (const limb_t *)other2;
#endif

memcpy(x3, other1, 2*sizeof(fe));

ladder_part1(xs);

/* Here z2 = t2^2 */
mul1(z2,other1);
mul1(z2,other1+NLIMBS);
mul1(z2,xo2);
const limb_t sixteen = 16;
mul (z2,z2,&sixteen,1);

mul1(z3,xo2);
sub(z3,z3,x3);
sqr1(z3);

/* check equality */
sub(z3,z3,z2);

/* If canon(z2) then both sides are zero.
* If canon(z3) then the two sides are equal.
*
* Reject sigs where both sides are zero, because
* that can happen if an input causes the ladder to
* return 0/0.
*/
return canon(z2) | ~canon(z3);
}

int x25519_verify_p2 (
const uint8_t response[X25519_BYTES],
const uint8_t challenge[X25519_BYTES],
const uint8_t eph[X25519_BYTES],
const uint8_t pub[X25519_BYTES]
) {
fe xs[7];
x25519_core(&xs[0],challenge,pub,0);
x25519_core(&xs[2],response,X25519_BASE_POINT,0);
return x25519_verify_core(&xs[2],xs[0],eph);
}
#endif // X25519_SUPPORT_VERIFY

#if X25519_SUPPORT_SIGN
static void sc_montmul (
scalar_t out,
const scalar_t a,
const scalar_t b
) {
/**
* OK, so carry bounding. We're using a high carry, so that the
* inputs don't have to be reduced.
*
* First montmul: output < (M^2 + Mp)/M = M+p, subtract p, < M. This gets rid of high carry.
* Second montmul, by r^2 mod p < p: output < (Mp + Mp)/M = 2p, subtract p, < p, done.
*/
unsigned i,j;
limb_t hic = 0;
for (i=0; i<NLIMBS; i++) {
limb_t carry=0, carry2=0, mand = a[i], mand2 = MONTGOMERY_FACTOR;

for (j=0; j<NLIMBS; j++) {
limb_t acc = out[j];
acc = umaal(&carry, acc, mand, b[j]);
if (j==0) mand2 *= acc;
acc = umaal(&carry2, acc, mand2, sc_p[j]);
if (j>0) out[j-1] = acc;
}

/* Add two carry registers and high carry */
out[NLIMBS-1] = adc(&hic, carry, carry2);
}

/* Reduce */
sdlimb_t scarry = 0;
for (i=0; i<NLIMBS; i++) {
out[i] = scarry = scarry + out[i] - sc_p[i];
scarry >>= X25519_WBITS;
}
limb_t need_add = -(scarry + hic);

limb_t carry = 0;
for (i=0; i<NLIMBS; i++) {
out[i] = umaal(&carry, out[i], need_add, sc_p[i]);
}
}

void x25519_sign_p2 (
uint8_t response[X25519_BYTES],
const uint8_t challenge[X25519_BYTES],
const uint8_t eph_secret[X25519_BYTES],
const uint8_t secret[X25519_BYTES]
) {
/* FUTURE memory/code size: just make eph_secret non-const? */
scalar_t scalar1;
swapin(scalar1,eph_secret);

#if X25519_MEMCPY_PARAMS
scalar_t scalar2, scalar3;
swapin(scalar2,secret);
swapin(scalar3,challenge);
sc_montmul(scalar1,scalar2,scalar3);
memset(scalar2,0,sizeof(scalar2));
sc_montmul(scalar2,scalar1,sc_r2);
swapout(response,scalar2);
#else
sc_montmul(scalar1,(const limb_t *)secret,(const limb_t *)challenge);
memset(response,0,X25519_BYTES);
sc_montmul((limb_t *)response,scalar1,sc_r2);
#endif
}
#endif // X25519_SUPPORT_SIGN


+ 128
- 0
strobe/x25519.h View File

@@ -0,0 +1,128 @@
/**
* @file x25519.h
* @copyright
* Copyright (c) 2016 Cryptography Research, Inc. \n
* Released under the MIT License. See LICENSE.txt for license information.
* @author Mike Hamburg
* @brief X25519 key exchange and signatures.
*/

#ifndef __X25519_H__
#define __X25519_H__

#define X25519_BYTES (256/8)

/* The base point (9) */
extern const unsigned char X25519_BASE_POINT[X25519_BYTES];

/** Number of bytes in an EC public key */
#define EC_PUBLIC_BYTES 32

/** Number of bytes in an EC private key */
#define EC_PRIVATE_BYTES 32

/**
* Number of bytes in a Schnorr challenge.
* Could be set to 16 in a pinch. (FUTURE?)
*/
#define EC_CHALLENGE_BYTES 32

/** Enough bytes to get a uniform sample mod #E. For eg a Brainpool
* curve this would need to be more than for a private key, but due
* to the special prime used by Curve25519, the same size is enough.
*/
#define EC_UNIFORM_BYTES 32

/* x25519 scalar multiplication. Sets out to scalar*base.
*
* If clamp is set (and supported by X25519_INTEROP_SUPPORT_CLAMP)
* then the scalar will be "clamped" like a Curve25519 secret key.
* This adds almost no security, but permits interop with other x25519
* implementations without manually clamping the keys.
*
* Per RFC 7748, this function returns failure (-1) if the output
* is zero and clamp is set. This indicates "non-contributory behavior",
* meaning that one party might steer the key so that the other party's
* contribution doesn't matter, or contributes only a little entropy.
*
* WARNING: however, this function differs from RFC 7748 in another way:
* it pays attention to the high bit base[EC_PUBLIC_BYTES-1] & 0x80, but
* RFC 7748 says to ignore this bit. For compatibility with RFC 7748,
* you must also clear this bit by running base[EC_PUBLIC_BYTES-1] &= 0x7F.
* This library won't clear it for you because it takes the base point as
* const, and (depending on build flags) dosen't copy it.
*
* If clamp==0, or if X25519_INTEROP_SUPPORT_CLAMP==0, then this function
* always returns 0.
*/
int x25519 (
unsigned char out[EC_PUBLIC_BYTES],
const unsigned char scalar[EC_PRIVATE_BYTES],
const unsigned char base[EC_PUBLIC_BYTES],
int clamp
);

/**
* Returns 0 on success, -1 on failure.
*
* Per RFC 7748, this function returns failure if the output
* is zero and clamp is set. This usually doesn't matter for
* base scalarmuls.
*
* If clamp==0, or if X25519_INTEROP_SUPPORT_CLAMP==0, then this function
* always returns 0.
*
* Same as x255(out,scalar,X255_BASE_POINT), except that
* other implementations may optimize it.
*/
static inline int x25519_base (
unsigned char out[EC_PUBLIC_BYTES],
const unsigned char scalar[EC_PRIVATE_BYTES],
int clamp
) {
return x25519(out,scalar,X25519_BASE_POINT,clamp);
}

/**
* As x25519_base, but with a scalar that's EC_UNIFORM_BYTES long,
* and clamp always 0 (and thus, no return value).
*
* This is used for signing. Implementors must replace it for
* curves that require more bytes for uniformity (Brainpool).
*/
static inline void x25519_base_uniform (
unsigned char out[EC_PUBLIC_BYTES],
const unsigned char scalar[EC_UNIFORM_BYTES]
) {
(void)x25519_base(out,scalar,0);
}

/**
* STROBE-compatible Schnorr signatures using curve25519 (not ed25519)
*
* The user will call x25519_base_uniform(eph,eph_secret) to schedule
* a random ephemeral secret key. They then call a Schnorr oracle to
* get a challenge, and compute the response using this function.
*/
void x25519_sign_p2 (
unsigned char response[EC_PRIVATE_BYTES],
const unsigned char challenge[EC_CHALLENGE_BYTES],
const unsigned char eph_secret[EC_UNIFORM_BYTES],
const unsigned char secret[EC_PRIVATE_BYTES]
);

/**
* STROBE-compatible signature verification using curve25519 (not ed25519).
* This function is the public equivalent x25519_sign_p2, taking the long-term
* and ephemeral public keys instead of secret ones.
*
* Returns -1 on failure and 0 on success.
*/
int x25519_verify_p2 (
const unsigned char response[X25519_BYTES],
const unsigned char challenge[X25519_BYTES],
const unsigned char eph[X25519_BYTES],
const unsigned char pub[X25519_BYTES]
);

#endif /* __X25519_H__ */

Loading…
Cancel
Save