@@ -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. |
@@ -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. |
@@ -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 |
@@ -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. |
@@ -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]); | |||||
} |
@@ -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 | |||||
@@ -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) |
@@ -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 | |||||
@@ -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) |
@@ -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) |
@@ -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) | |||||
@@ -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 |
@@ -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." | |||||
@@ -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 +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 | |||||
@@ -0,0 +1 @@ | |||||
__all__ = ['Strobe','Keccak'] |
@@ -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 | |||||
@@ -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 | |||||
@@ -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 | |||||
@@ -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 | |||||
@@ -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 | |||||
@@ -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 | |||||
@@ -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 | |||||
@@ -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 | |||||
@@ -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 | |||||
@@ -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 | |||||
@@ -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 | |||||
@@ -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__ */ |
@@ -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__ | |||||
@@ -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; | |||||
} |
@@ -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; | |||||
} |
@@ -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> |
@@ -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>λ</var> bits, where <var>λ</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>ε</var> < (<var>N</var>/2<sup><var>λ</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> |
@@ -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> |
@@ -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 — <span class="sc">Keccak</span>-<i>f</i> — 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> |
@@ -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> |
@@ -0,0 +1 @@ | |||||
strobe-20191114.pdf |
@@ -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; } |
@@ -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 | |||||
@@ -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__ */ |