mirror of
https://github.com/openssl/openssl.git
synced 2024-11-27 20:14:20 +08:00
Add ChaCha related ciphers to default provider
Reviewed-by: Richard Levitte <levitte@openssl.org> (Merged from https://github.com/openssl/openssl/pull/10081)
This commit is contained in:
parent
64fd90fbe9
commit
3d5a7578e0
@ -278,6 +278,8 @@ int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
|
|||||||
case NID_rc2_64_cbc:
|
case NID_rc2_64_cbc:
|
||||||
case NID_rc2_cfb64:
|
case NID_rc2_cfb64:
|
||||||
case NID_rc2_ofb64:
|
case NID_rc2_ofb64:
|
||||||
|
case NID_chacha20:
|
||||||
|
case NID_chacha20_poly1305:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
goto legacy;
|
goto legacy;
|
||||||
@ -1120,6 +1122,11 @@ int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr)
|
|||||||
params[0] = OSSL_PARAM_construct_octet_string(OSSL_CIPHER_PARAM_AEAD_TAG,
|
params[0] = OSSL_PARAM_construct_octet_string(OSSL_CIPHER_PARAM_AEAD_TAG,
|
||||||
ptr, sz);
|
ptr, sz);
|
||||||
break;
|
break;
|
||||||
|
case EVP_CTRL_AEAD_SET_MAC_KEY:
|
||||||
|
params[0] =
|
||||||
|
OSSL_PARAM_construct_octet_string(OSSL_CIPHER_PARAM_AEAD_MAC_KEY,
|
||||||
|
ptr, sz);
|
||||||
|
break;
|
||||||
case EVP_CTRL_AEAD_TLS1_AAD:
|
case EVP_CTRL_AEAD_TLS1_AAD:
|
||||||
/* This one does a set and a get - since it returns a padding size */
|
/* This one does a set and a get - since it returns a padding size */
|
||||||
params[0] =
|
params[0] =
|
||||||
|
@ -12,7 +12,6 @@
|
|||||||
#include <openssl/crypto.h>
|
#include <openssl/crypto.h>
|
||||||
|
|
||||||
#include "crypto/poly1305.h"
|
#include "crypto/poly1305.h"
|
||||||
#include "poly1305_local.h"
|
|
||||||
|
|
||||||
size_t Poly1305_ctx_size(void)
|
size_t Poly1305_ctx_size(void)
|
||||||
{
|
{
|
||||||
|
@ -12,7 +12,6 @@
|
|||||||
#include <openssl/evp.h>
|
#include <openssl/evp.h>
|
||||||
#include "crypto/asn1.h"
|
#include "crypto/asn1.h"
|
||||||
#include "crypto/poly1305.h"
|
#include "crypto/poly1305.h"
|
||||||
#include "poly1305_local.h"
|
|
||||||
#include "crypto/evp.h"
|
#include "crypto/evp.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1,27 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
|
||||||
* this file except in compliance with the License. You can obtain a copy
|
|
||||||
* in the file LICENSE in the source distribution or at
|
|
||||||
* https://www.openssl.org/source/license.html
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef void (*poly1305_blocks_f) (void *ctx, const unsigned char *inp,
|
|
||||||
size_t len, unsigned int padbit);
|
|
||||||
typedef void (*poly1305_emit_f) (void *ctx, unsigned char mac[16],
|
|
||||||
const unsigned int nonce[4]);
|
|
||||||
|
|
||||||
struct poly1305_context {
|
|
||||||
double opaque[24]; /* large enough to hold internal state, declared
|
|
||||||
* 'double' to ensure at least 64-bit invariant
|
|
||||||
* alignment across all platforms and
|
|
||||||
* configurations */
|
|
||||||
unsigned int nonce[4];
|
|
||||||
unsigned char data[POLY1305_BLOCK_SIZE];
|
|
||||||
size_t num;
|
|
||||||
struct {
|
|
||||||
poly1305_blocks_f blocks;
|
|
||||||
poly1305_emit_f emit;
|
|
||||||
} func;
|
|
||||||
};
|
|
@ -315,6 +315,10 @@ IV length and the tag length.
|
|||||||
Sets the IV length to be used for an AEAD cipher for the associated cipher ctx.
|
Sets the IV length to be used for an AEAD cipher for the associated cipher ctx.
|
||||||
The length of the "ivlen" parameter should not exceed that of a B<size_t>.
|
The length of the "ivlen" parameter should not exceed that of a B<size_t>.
|
||||||
|
|
||||||
|
=item "mackey" (B<OSSL_CIPHER_PARAM_AEAD_MAC_KEY>) <octet string>
|
||||||
|
|
||||||
|
Sets the MAC key used by composite AEAD ciphers such as AES-CBC-HMAC-SHA256.
|
||||||
|
|
||||||
=item "randkey" (B<OSSL_CIPHER_PARAM_RANDOM_KEY>) <octet string>
|
=item "randkey" (B<OSSL_CIPHER_PARAM_RANDOM_KEY>) <octet string>
|
||||||
|
|
||||||
Gets a implementation specific randomly generated key for the associated
|
Gets a implementation specific randomly generated key for the associated
|
||||||
|
@ -15,6 +15,25 @@
|
|||||||
|
|
||||||
typedef struct poly1305_context POLY1305;
|
typedef struct poly1305_context POLY1305;
|
||||||
|
|
||||||
|
typedef void (*poly1305_blocks_f) (void *ctx, const unsigned char *inp,
|
||||||
|
size_t len, unsigned int padbit);
|
||||||
|
typedef void (*poly1305_emit_f) (void *ctx, unsigned char mac[16],
|
||||||
|
const unsigned int nonce[4]);
|
||||||
|
|
||||||
|
struct poly1305_context {
|
||||||
|
double opaque[24]; /* large enough to hold internal state, declared
|
||||||
|
* 'double' to ensure at least 64-bit invariant
|
||||||
|
* alignment across all platforms and
|
||||||
|
* configurations */
|
||||||
|
unsigned int nonce[4];
|
||||||
|
unsigned char data[POLY1305_BLOCK_SIZE];
|
||||||
|
size_t num;
|
||||||
|
struct {
|
||||||
|
poly1305_blocks_f blocks;
|
||||||
|
poly1305_emit_f emit;
|
||||||
|
} func;
|
||||||
|
};
|
||||||
|
|
||||||
size_t Poly1305_ctx_size(void);
|
size_t Poly1305_ctx_size(void);
|
||||||
void Poly1305_Init(POLY1305 *ctx, const unsigned char key[32]);
|
void Poly1305_Init(POLY1305 *ctx, const unsigned char key[32]);
|
||||||
void Poly1305_Update(POLY1305 *ctx, const unsigned char *inp, size_t len);
|
void Poly1305_Update(POLY1305 *ctx, const unsigned char *inp, size_t len);
|
||||||
|
@ -66,6 +66,7 @@ extern "C" {
|
|||||||
#define OSSL_CIPHER_PARAM_AEAD_TLS1_IV_FIXED "tlsivfixed" /* octet_string */
|
#define OSSL_CIPHER_PARAM_AEAD_TLS1_IV_FIXED "tlsivfixed" /* octet_string */
|
||||||
#define OSSL_CIPHER_PARAM_AEAD_IVLEN OSSL_CIPHER_PARAM_IVLEN
|
#define OSSL_CIPHER_PARAM_AEAD_IVLEN OSSL_CIPHER_PARAM_IVLEN
|
||||||
#define OSSL_CIPHER_PARAM_AEAD_TAGLEN "taglen" /* size_t */
|
#define OSSL_CIPHER_PARAM_AEAD_TAGLEN "taglen" /* size_t */
|
||||||
|
#define OSSL_CIPHER_PARAM_AEAD_MAC_KEY "mackey" /* octet_string */
|
||||||
#define OSSL_CIPHER_PARAM_RANDOM_KEY "randkey" /* octet_string */
|
#define OSSL_CIPHER_PARAM_RANDOM_KEY "randkey" /* octet_string */
|
||||||
#define OSSL_CIPHER_PARAM_RC2_KEYBITS "keybits" /* size_t */
|
#define OSSL_CIPHER_PARAM_RC2_KEYBITS "keybits" /* size_t */
|
||||||
/* For passing the AlgorithmIdentifier parameter in DER form */
|
/* For passing the AlgorithmIdentifier parameter in DER form */
|
||||||
|
@ -295,6 +295,12 @@ static const OSSL_ALGORITHM deflt_ciphers[] = {
|
|||||||
{ "RC2-CFB", "default=yes", rc2128cfb128_functions },
|
{ "RC2-CFB", "default=yes", rc2128cfb128_functions },
|
||||||
{ "RC2-OFB", "default=yes", rc2128ofb128_functions },
|
{ "RC2-OFB", "default=yes", rc2128ofb128_functions },
|
||||||
#endif /* OPENSSL_NO_RC2 */
|
#endif /* OPENSSL_NO_RC2 */
|
||||||
|
#ifndef OPENSSL_NO_CHACHA
|
||||||
|
{ "ChaCha20", "default=yes", chacha20_functions },
|
||||||
|
# ifndef OPENSSL_NO_POLY1305
|
||||||
|
{ "ChaCha20-Poly1305", "default=yes", chacha20_poly1305_functions },
|
||||||
|
# endif /* OPENSSL_NO_POLY1305 */
|
||||||
|
#endif /* OPENSSL_NO_CHACHA */
|
||||||
{ NULL, NULL, NULL }
|
{ NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -19,6 +19,8 @@ $SM4_GOAL=../../libimplementations.a
|
|||||||
$RC4_GOAL=../../libimplementations.a
|
$RC4_GOAL=../../libimplementations.a
|
||||||
$RC5_GOAL=../../libimplementations.a
|
$RC5_GOAL=../../libimplementations.a
|
||||||
$RC2_GOAL=../../libimplementations.a
|
$RC2_GOAL=../../libimplementations.a
|
||||||
|
$CHACHA_GOAL=../../libimplementations.a
|
||||||
|
$CHACHAPOLY_GOAL=../../libimplementations.a
|
||||||
|
|
||||||
IF[{- !$disabled{des} -}]
|
IF[{- !$disabled{des} -}]
|
||||||
SOURCE[$TDES_1_GOAL]=cipher_tdes.c cipher_tdes_hw.c
|
SOURCE[$TDES_1_GOAL]=cipher_tdes.c cipher_tdes_hw.c
|
||||||
@ -100,3 +102,13 @@ IF[{- !$disabled{rc2} -}]
|
|||||||
SOURCE[$RC2_GOAL]=\
|
SOURCE[$RC2_GOAL]=\
|
||||||
cipher_rc2.c cipher_rc2_hw.c
|
cipher_rc2.c cipher_rc2_hw.c
|
||||||
ENDIF
|
ENDIF
|
||||||
|
|
||||||
|
IF[{- !$disabled{chacha} -}]
|
||||||
|
SOURCE[$CHACHA_GOAL]=\
|
||||||
|
cipher_chacha20.c cipher_chacha20_hw.c
|
||||||
|
IF[{- !$disabled{poly1305} -}]
|
||||||
|
SOURCE[$CHACHAPOLY_GOAL]=\
|
||||||
|
cipher_chacha20_poly1305.c cipher_chacha20_poly1305_hw.c
|
||||||
|
ENDIF
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
187
providers/implementations/ciphers/cipher_chacha20.c
Normal file
187
providers/implementations/ciphers/cipher_chacha20.c
Normal file
@ -0,0 +1,187 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2019 The OpenSSL Project Authors. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||||
|
* this file except in compliance with the License. You can obtain a copy
|
||||||
|
* in the file LICENSE in the source distribution or at
|
||||||
|
* https://www.openssl.org/source/license.html
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Dispatch functions for chacha20 cipher */
|
||||||
|
|
||||||
|
#include "cipher_chacha20.h"
|
||||||
|
#include "prov/implementations.h"
|
||||||
|
#include "prov/providercommonerr.h"
|
||||||
|
|
||||||
|
#define CHACHA20_KEYLEN (CHACHA_KEY_SIZE)
|
||||||
|
#define CHACHA20_BLKLEN (1)
|
||||||
|
#define CHACHA20_IVLEN (CHACHA_CTR_SIZE)
|
||||||
|
/* TODO(3.0) Figure out what flags are required */
|
||||||
|
#define CHACHA20_FLAGS (EVP_CIPH_CUSTOM_IV | EVP_CIPH_ALWAYS_CALL_INIT)
|
||||||
|
|
||||||
|
static OSSL_OP_cipher_newctx_fn chacha20_newctx;
|
||||||
|
static OSSL_OP_cipher_freectx_fn chacha20_freectx;
|
||||||
|
static OSSL_OP_cipher_get_params_fn chacha20_get_params;
|
||||||
|
static OSSL_OP_cipher_get_ctx_params_fn chacha20_get_ctx_params;
|
||||||
|
static OSSL_OP_cipher_set_ctx_params_fn chacha20_set_ctx_params;
|
||||||
|
static OSSL_OP_cipher_gettable_ctx_params_fn chacha20_gettable_ctx_params;
|
||||||
|
static OSSL_OP_cipher_settable_ctx_params_fn chacha20_settable_ctx_params;
|
||||||
|
#define chacha20_cipher cipher_generic_cipher
|
||||||
|
#define chacha20_update cipher_generic_stream_update
|
||||||
|
#define chacha20_final cipher_generic_stream_final
|
||||||
|
#define chacha20_gettable_params cipher_generic_gettable_params
|
||||||
|
|
||||||
|
void chacha20_initctx(PROV_CHACHA20_CTX *ctx)
|
||||||
|
{
|
||||||
|
cipher_generic_initkey(ctx, CHACHA20_KEYLEN * 8,
|
||||||
|
CHACHA20_BLKLEN * 8,
|
||||||
|
CHACHA20_IVLEN * 8,
|
||||||
|
0, CHACHA20_FLAGS,
|
||||||
|
PROV_CIPHER_HW_chacha20(CHACHA20_KEYLEN * 8),
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void *chacha20_newctx(void *provctx)
|
||||||
|
{
|
||||||
|
PROV_CHACHA20_CTX *ctx = OPENSSL_zalloc(sizeof(*ctx));
|
||||||
|
|
||||||
|
if (ctx != NULL)
|
||||||
|
chacha20_initctx(ctx);
|
||||||
|
return ctx;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void chacha20_freectx(void *vctx)
|
||||||
|
{
|
||||||
|
PROV_CHACHA20_CTX *ctx = (PROV_CHACHA20_CTX *)vctx;
|
||||||
|
|
||||||
|
if (ctx != NULL) {
|
||||||
|
OPENSSL_clear_free(ctx, sizeof(ctx));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int chacha20_get_params(OSSL_PARAM params[])
|
||||||
|
{
|
||||||
|
return cipher_generic_get_params(params, 0, CHACHA20_FLAGS,
|
||||||
|
CHACHA20_KEYLEN * 8,
|
||||||
|
CHACHA20_BLKLEN * 8,
|
||||||
|
CHACHA20_IVLEN * 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int chacha20_get_ctx_params(void *vctx, OSSL_PARAM params[])
|
||||||
|
{
|
||||||
|
OSSL_PARAM *p;
|
||||||
|
|
||||||
|
p = OSSL_PARAM_locate(params, OSSL_CIPHER_PARAM_IVLEN);
|
||||||
|
if (p != NULL && !OSSL_PARAM_set_size_t(p, CHACHA20_IVLEN)) {
|
||||||
|
ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_SET_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
p = OSSL_PARAM_locate(params, OSSL_CIPHER_PARAM_KEYLEN);
|
||||||
|
if (p != NULL && !OSSL_PARAM_set_size_t(p, CHACHA20_KEYLEN)) {
|
||||||
|
ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_SET_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const OSSL_PARAM chacha20_known_gettable_ctx_params[] = {
|
||||||
|
OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_KEYLEN, NULL),
|
||||||
|
OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_IVLEN, NULL),
|
||||||
|
OSSL_PARAM_END
|
||||||
|
};
|
||||||
|
const OSSL_PARAM *chacha20_gettable_ctx_params(void)
|
||||||
|
{
|
||||||
|
return chacha20_known_gettable_ctx_params;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int chacha20_set_ctx_params(void *vctx, const OSSL_PARAM params[])
|
||||||
|
{
|
||||||
|
const OSSL_PARAM *p;
|
||||||
|
size_t len;
|
||||||
|
|
||||||
|
p = OSSL_PARAM_locate_const(params, OSSL_CIPHER_PARAM_KEYLEN);
|
||||||
|
if (p != NULL) {
|
||||||
|
if (!OSSL_PARAM_get_size_t(p, &len)) {
|
||||||
|
ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_GET_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (len != CHACHA20_KEYLEN) {
|
||||||
|
ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_KEY_LENGTH);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
p = OSSL_PARAM_locate_const(params, OSSL_CIPHER_PARAM_IVLEN);
|
||||||
|
if (p != NULL) {
|
||||||
|
if (!OSSL_PARAM_get_size_t(p, &len)) {
|
||||||
|
ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_GET_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (len != CHACHA20_IVLEN) {
|
||||||
|
ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_IV_LENGTH);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const OSSL_PARAM chacha20_known_settable_ctx_params[] = {
|
||||||
|
OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_KEYLEN, NULL),
|
||||||
|
OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_IVLEN, NULL),
|
||||||
|
OSSL_PARAM_END
|
||||||
|
};
|
||||||
|
const OSSL_PARAM *chacha20_settable_ctx_params(void)
|
||||||
|
{
|
||||||
|
return chacha20_known_settable_ctx_params;
|
||||||
|
}
|
||||||
|
|
||||||
|
int chacha20_einit(void *vctx, const unsigned char *key, size_t keylen,
|
||||||
|
const unsigned char *iv, size_t ivlen)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret= cipher_generic_einit(vctx, key, keylen, iv, ivlen);
|
||||||
|
if (ret && iv != NULL) {
|
||||||
|
PROV_CIPHER_CTX *ctx = (PROV_CIPHER_CTX *)vctx;
|
||||||
|
PROV_CIPHER_HW_CHACHA20 *hw = (PROV_CIPHER_HW_CHACHA20 *)ctx->hw;
|
||||||
|
|
||||||
|
hw->initiv(ctx);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int chacha20_dinit(void *vctx, const unsigned char *key, size_t keylen,
|
||||||
|
const unsigned char *iv, size_t ivlen)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret= cipher_generic_dinit(vctx, key, keylen, iv, ivlen);
|
||||||
|
if (ret && iv != NULL) {
|
||||||
|
PROV_CIPHER_CTX *ctx = (PROV_CIPHER_CTX *)vctx;
|
||||||
|
PROV_CIPHER_HW_CHACHA20 *hw = (PROV_CIPHER_HW_CHACHA20 *)ctx->hw;
|
||||||
|
|
||||||
|
hw->initiv(ctx);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* chacha20_functions */
|
||||||
|
const OSSL_DISPATCH chacha20_functions[] = {
|
||||||
|
{ OSSL_FUNC_CIPHER_NEWCTX, (void (*)(void))chacha20_newctx },
|
||||||
|
{ OSSL_FUNC_CIPHER_FREECTX, (void (*)(void))chacha20_freectx },
|
||||||
|
{ OSSL_FUNC_CIPHER_ENCRYPT_INIT, (void (*)(void))chacha20_einit },
|
||||||
|
{ OSSL_FUNC_CIPHER_DECRYPT_INIT, (void (*)(void))chacha20_dinit },
|
||||||
|
{ OSSL_FUNC_CIPHER_UPDATE, (void (*)(void))chacha20_update },
|
||||||
|
{ OSSL_FUNC_CIPHER_FINAL, (void (*)(void))chacha20_final },
|
||||||
|
{ OSSL_FUNC_CIPHER_CIPHER, (void (*)(void))chacha20_cipher},
|
||||||
|
{ OSSL_FUNC_CIPHER_GET_PARAMS, (void (*)(void))chacha20_get_params },
|
||||||
|
{ OSSL_FUNC_CIPHER_GETTABLE_PARAMS,(void (*)(void))chacha20_gettable_params },
|
||||||
|
{ OSSL_FUNC_CIPHER_GET_CTX_PARAMS, (void (*)(void))chacha20_get_ctx_params },
|
||||||
|
{ OSSL_FUNC_CIPHER_GETTABLE_CTX_PARAMS,
|
||||||
|
(void (*)(void))chacha20_gettable_ctx_params },
|
||||||
|
{ OSSL_FUNC_CIPHER_SET_CTX_PARAMS, (void (*)(void))chacha20_set_ctx_params },
|
||||||
|
{ OSSL_FUNC_CIPHER_SETTABLE_CTX_PARAMS,
|
||||||
|
(void (*)(void))chacha20_settable_ctx_params },
|
||||||
|
{ 0, NULL }
|
||||||
|
};
|
||||||
|
|
34
providers/implementations/ciphers/cipher_chacha20.h
Normal file
34
providers/implementations/ciphers/cipher_chacha20.h
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2019 The OpenSSL Project Authors. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||||
|
* this file except in compliance with the License. You can obtain a copy
|
||||||
|
* in the file LICENSE in the source distribution or at
|
||||||
|
* https://www.openssl.org/source/license.html
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "include/crypto/chacha.h"
|
||||||
|
#include "prov/ciphercommon.h"
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PROV_CIPHER_CTX base; /* must be first */
|
||||||
|
union {
|
||||||
|
OSSL_UNION_ALIGN;
|
||||||
|
unsigned int d[CHACHA_KEY_SIZE / 4];
|
||||||
|
} key;
|
||||||
|
unsigned int counter[CHACHA_CTR_SIZE / 4];
|
||||||
|
unsigned char buf[CHACHA_BLK_SIZE];
|
||||||
|
unsigned int partial_len;
|
||||||
|
} PROV_CHACHA20_CTX;
|
||||||
|
|
||||||
|
typedef struct prov_cipher_hw_chacha20_st {
|
||||||
|
PROV_CIPHER_HW base; /* must be first */
|
||||||
|
int (*initiv)(PROV_CIPHER_CTX *ctx);
|
||||||
|
|
||||||
|
} PROV_CIPHER_HW_CHACHA20;
|
||||||
|
|
||||||
|
const PROV_CIPHER_HW *PROV_CIPHER_HW_chacha20(size_t keybits);
|
||||||
|
|
||||||
|
OSSL_OP_cipher_encrypt_init_fn chacha20_einit;
|
||||||
|
OSSL_OP_cipher_decrypt_init_fn chacha20_dinit;
|
||||||
|
void chacha20_initctx(PROV_CHACHA20_CTX *ctx);
|
121
providers/implementations/ciphers/cipher_chacha20_hw.c
Normal file
121
providers/implementations/ciphers/cipher_chacha20_hw.c
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2019 The OpenSSL Project Authors. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||||
|
* this file except in compliance with the License. You can obtain a copy
|
||||||
|
* in the file LICENSE in the source distribution or at
|
||||||
|
* https://www.openssl.org/source/license.html
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* chacha20 cipher implementation */
|
||||||
|
|
||||||
|
#include "cipher_chacha20.h"
|
||||||
|
|
||||||
|
static int chacha20_initkey(PROV_CIPHER_CTX *bctx, const uint8_t *key,
|
||||||
|
size_t keylen)
|
||||||
|
{
|
||||||
|
PROV_CHACHA20_CTX *ctx = (PROV_CHACHA20_CTX *)bctx;
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
if (key != NULL) {
|
||||||
|
for (i = 0; i < CHACHA_KEY_SIZE; i += 4)
|
||||||
|
ctx->key.d[i / 4] = CHACHA_U8TOU32(key + i);
|
||||||
|
}
|
||||||
|
ctx->partial_len = 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int chacha20_initiv(PROV_CIPHER_CTX *bctx)
|
||||||
|
{
|
||||||
|
PROV_CHACHA20_CTX *ctx = (PROV_CHACHA20_CTX *)bctx;
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
if (bctx->iv_set) {
|
||||||
|
for (i = 0; i < CHACHA_CTR_SIZE; i += 4)
|
||||||
|
ctx->counter[i / 4] = CHACHA_U8TOU32(bctx->oiv + i);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int chacha20_cipher(PROV_CIPHER_CTX *bctx, unsigned char *out,
|
||||||
|
const unsigned char *in, size_t inl)
|
||||||
|
{
|
||||||
|
PROV_CHACHA20_CTX *ctx = (PROV_CHACHA20_CTX *)bctx;
|
||||||
|
unsigned int n, rem, ctr32;
|
||||||
|
|
||||||
|
n = ctx->partial_len;
|
||||||
|
if (n > 0) {
|
||||||
|
while (inl > 0 && n < CHACHA_BLK_SIZE) {
|
||||||
|
*out++ = *in++ ^ ctx->buf[n++];
|
||||||
|
inl--;
|
||||||
|
}
|
||||||
|
ctx->partial_len = n;
|
||||||
|
|
||||||
|
if (inl == 0)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
if (n == CHACHA_BLK_SIZE) {
|
||||||
|
ctx->partial_len = 0;
|
||||||
|
ctx->counter[0]++;
|
||||||
|
if (ctx->counter[0] == 0)
|
||||||
|
ctx->counter[1]++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rem = (unsigned int)(inl % CHACHA_BLK_SIZE);
|
||||||
|
inl -= rem;
|
||||||
|
ctr32 = ctx->counter[0];
|
||||||
|
while (inl >= CHACHA_BLK_SIZE) {
|
||||||
|
size_t blocks = inl / CHACHA_BLK_SIZE;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 1<<28 is just a not-so-small yet not-so-large number...
|
||||||
|
* Below condition is practically never met, but it has to
|
||||||
|
* be checked for code correctness.
|
||||||
|
*/
|
||||||
|
if (sizeof(size_t) > sizeof(unsigned int) && blocks > (1U << 28))
|
||||||
|
blocks = (1U << 28);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* As ChaCha20_ctr32 operates on 32-bit counter, caller
|
||||||
|
* has to handle overflow. 'if' below detects the
|
||||||
|
* overflow, which is then handled by limiting the
|
||||||
|
* amount of blocks to the exact overflow point...
|
||||||
|
*/
|
||||||
|
ctr32 += (unsigned int)blocks;
|
||||||
|
if (ctr32 < blocks) {
|
||||||
|
blocks -= ctr32;
|
||||||
|
ctr32 = 0;
|
||||||
|
}
|
||||||
|
blocks *= CHACHA_BLK_SIZE;
|
||||||
|
ChaCha20_ctr32(out, in, blocks, ctx->key.d, ctx->counter);
|
||||||
|
inl -= blocks;
|
||||||
|
in += blocks;
|
||||||
|
out += blocks;
|
||||||
|
|
||||||
|
ctx->counter[0] = ctr32;
|
||||||
|
if (ctr32 == 0) ctx->counter[1]++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rem > 0) {
|
||||||
|
memset(ctx->buf, 0, sizeof(ctx->buf));
|
||||||
|
ChaCha20_ctr32(ctx->buf, ctx->buf, CHACHA_BLK_SIZE,
|
||||||
|
ctx->key.d, ctx->counter);
|
||||||
|
for (n = 0; n < rem; n++)
|
||||||
|
out[n] = in[n] ^ ctx->buf[n];
|
||||||
|
ctx->partial_len = rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const PROV_CIPHER_HW_CHACHA20 chacha20_hw = {
|
||||||
|
{ chacha20_initkey, chacha20_cipher },
|
||||||
|
chacha20_initiv
|
||||||
|
};
|
||||||
|
|
||||||
|
const PROV_CIPHER_HW *PROV_CIPHER_HW_chacha20(size_t keybits)
|
||||||
|
{
|
||||||
|
return (PROV_CIPHER_HW *)&chacha20_hw;
|
||||||
|
}
|
||||||
|
|
314
providers/implementations/ciphers/cipher_chacha20_poly1305.c
Normal file
314
providers/implementations/ciphers/cipher_chacha20_poly1305.c
Normal file
@ -0,0 +1,314 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2019 The OpenSSL Project Authors. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||||
|
* this file except in compliance with the License. You can obtain a copy
|
||||||
|
* in the file LICENSE in the source distribution or at
|
||||||
|
* https://www.openssl.org/source/license.html
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Dispatch functions for chacha20_poly1305 cipher */
|
||||||
|
|
||||||
|
#include "cipher_chacha20_poly1305.h"
|
||||||
|
#include "prov/implementations.h"
|
||||||
|
#include "prov/providercommonerr.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define CHACHA20_POLY1305_KEYLEN CHACHA_KEY_SIZE
|
||||||
|
#define CHACHA20_POLY1305_BLKLEN 1
|
||||||
|
#define CHACHA20_POLY1305_MAX_IVLEN 12
|
||||||
|
#define CHACHA20_POLY1305_MODE 0
|
||||||
|
/* TODO(3.0) Figure out what flags are required */
|
||||||
|
#define CHACHA20_POLY1305_FLAGS (EVP_CIPH_FLAG_AEAD_CIPHER \
|
||||||
|
| EVP_CIPH_ALWAYS_CALL_INIT \
|
||||||
|
| EVP_CIPH_CTRL_INIT \
|
||||||
|
| EVP_CIPH_CUSTOM_COPY \
|
||||||
|
| EVP_CIPH_FLAG_CUSTOM_CIPHER \
|
||||||
|
| EVP_CIPH_CUSTOM_IV \
|
||||||
|
| EVP_CIPH_CUSTOM_IV_LENGTH)
|
||||||
|
|
||||||
|
static OSSL_OP_cipher_newctx_fn chacha20_poly1305_newctx;
|
||||||
|
static OSSL_OP_cipher_freectx_fn chacha20_poly1305_freectx;
|
||||||
|
static OSSL_OP_cipher_encrypt_init_fn chacha20_poly1305_einit;
|
||||||
|
static OSSL_OP_cipher_decrypt_init_fn chacha20_poly1305_dinit;
|
||||||
|
static OSSL_OP_cipher_get_params_fn chacha20_poly1305_get_params;
|
||||||
|
static OSSL_OP_cipher_get_ctx_params_fn chacha20_poly1305_get_ctx_params;
|
||||||
|
static OSSL_OP_cipher_set_ctx_params_fn chacha20_poly1305_set_ctx_params;
|
||||||
|
static OSSL_OP_cipher_cipher_fn chacha20_poly1305_cipher;
|
||||||
|
static OSSL_OP_cipher_final_fn chacha20_poly1305_final;
|
||||||
|
static OSSL_OP_cipher_gettable_ctx_params_fn chacha20_poly1305_gettable_ctx_params;
|
||||||
|
#define chacha20_poly1305_settable_ctx_params cipher_aead_settable_ctx_params
|
||||||
|
#define chacha20_poly1305_gettable_params cipher_generic_gettable_params
|
||||||
|
#define chacha20_poly1305_update chacha20_poly1305_cipher
|
||||||
|
|
||||||
|
static void *chacha20_poly1305_newctx(void *provctx)
|
||||||
|
{
|
||||||
|
PROV_CHACHA20_POLY1305_CTX *ctx = OPENSSL_zalloc(sizeof(*ctx));
|
||||||
|
|
||||||
|
if (ctx != NULL) {
|
||||||
|
cipher_generic_initkey(&ctx->base, CHACHA20_POLY1305_KEYLEN * 8,
|
||||||
|
CHACHA20_POLY1305_BLKLEN * 8,
|
||||||
|
CHACHA20_POLY1305_IVLEN * 8,
|
||||||
|
CHACHA20_POLY1305_MODE,
|
||||||
|
CHACHA20_POLY1305_FLAGS,
|
||||||
|
PROV_CIPHER_HW_chacha20_poly1305(
|
||||||
|
CHACHA20_POLY1305_KEYLEN * 8),
|
||||||
|
NULL);
|
||||||
|
ctx->nonce_len = CHACHA20_POLY1305_IVLEN;
|
||||||
|
ctx->tls_payload_length = NO_TLS_PAYLOAD_LENGTH;
|
||||||
|
chacha20_initctx(&ctx->chacha);
|
||||||
|
}
|
||||||
|
return ctx;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void chacha20_poly1305_freectx(void *vctx)
|
||||||
|
{
|
||||||
|
PROV_CHACHA20_POLY1305_CTX *ctx = (PROV_CHACHA20_POLY1305_CTX *)vctx;
|
||||||
|
|
||||||
|
if (ctx != NULL)
|
||||||
|
OPENSSL_clear_free(ctx, sizeof(ctx));
|
||||||
|
}
|
||||||
|
|
||||||
|
static int chacha20_poly1305_get_params(OSSL_PARAM params[])
|
||||||
|
{
|
||||||
|
return cipher_generic_get_params(params, 0, CHACHA20_POLY1305_FLAGS,
|
||||||
|
CHACHA20_POLY1305_KEYLEN * 8,
|
||||||
|
CHACHA20_POLY1305_BLKLEN * 8,
|
||||||
|
CHACHA20_POLY1305_IVLEN * 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int chacha20_poly1305_get_ctx_params(void *vctx, OSSL_PARAM params[])
|
||||||
|
{
|
||||||
|
PROV_CHACHA20_POLY1305_CTX *ctx = (PROV_CHACHA20_POLY1305_CTX *)vctx;
|
||||||
|
OSSL_PARAM *p;
|
||||||
|
|
||||||
|
p = OSSL_PARAM_locate(params, OSSL_CIPHER_PARAM_IVLEN);
|
||||||
|
if (p != NULL) {
|
||||||
|
if (!OSSL_PARAM_set_size_t(p, ctx->nonce_len)) {
|
||||||
|
ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_SET_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
p = OSSL_PARAM_locate(params, OSSL_CIPHER_PARAM_KEYLEN);
|
||||||
|
if (p != NULL && !OSSL_PARAM_set_size_t(p, CHACHA20_POLY1305_KEYLEN)) {
|
||||||
|
ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_SET_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
p = OSSL_PARAM_locate(params, OSSL_CIPHER_PARAM_AEAD_TAGLEN);
|
||||||
|
if (p != NULL && !OSSL_PARAM_set_size_t(p, ctx->tag_len)) {
|
||||||
|
ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_SET_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
p = OSSL_PARAM_locate(params, OSSL_CIPHER_PARAM_AEAD_TLS1_AAD_PAD);
|
||||||
|
if (p != NULL && !OSSL_PARAM_set_size_t(p, ctx->tls_aad_pad_sz)) {
|
||||||
|
ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_SET_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
p = OSSL_PARAM_locate(params, OSSL_CIPHER_PARAM_AEAD_TAG);
|
||||||
|
if (p != NULL) {
|
||||||
|
if (p->data_type != OSSL_PARAM_OCTET_STRING) {
|
||||||
|
ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_SET_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (!ctx->base.enc) {
|
||||||
|
ERR_raise(ERR_LIB_PROV, PROV_R_TAG_NOTSET);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (p->data_size == 0 || p->data_size > POLY1305_BLOCK_SIZE) {
|
||||||
|
ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_TAGLEN);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
memcpy(p->data, ctx->tag, p->data_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const OSSL_PARAM chacha20_poly1305_known_gettable_ctx_params[] = {
|
||||||
|
OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_KEYLEN, NULL),
|
||||||
|
OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_IVLEN, NULL),
|
||||||
|
OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_AEAD_TAGLEN, NULL),
|
||||||
|
OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_AEAD_TAG, NULL, 0),
|
||||||
|
OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_AEAD_TLS1_AAD_PAD, NULL),
|
||||||
|
OSSL_PARAM_END
|
||||||
|
};
|
||||||
|
static const OSSL_PARAM *chacha20_poly1305_gettable_ctx_params(void)
|
||||||
|
{
|
||||||
|
return chacha20_poly1305_known_gettable_ctx_params;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int chacha20_poly1305_set_ctx_params(void *vctx,
|
||||||
|
const OSSL_PARAM params[])
|
||||||
|
{
|
||||||
|
const OSSL_PARAM *p;
|
||||||
|
size_t len;
|
||||||
|
PROV_CHACHA20_POLY1305_CTX *ctx = (PROV_CHACHA20_POLY1305_CTX *)vctx;
|
||||||
|
PROV_CIPHER_HW_CHACHA20_POLY1305 *hw =
|
||||||
|
(PROV_CIPHER_HW_CHACHA20_POLY1305 *)ctx->base.hw;
|
||||||
|
|
||||||
|
p = OSSL_PARAM_locate_const(params, OSSL_CIPHER_PARAM_KEYLEN);
|
||||||
|
if (p != NULL) {
|
||||||
|
if (!OSSL_PARAM_get_size_t(p, &len)) {
|
||||||
|
ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_GET_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (len != CHACHA20_POLY1305_KEYLEN) {
|
||||||
|
ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_KEY_LENGTH);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
p = OSSL_PARAM_locate_const(params, OSSL_CIPHER_PARAM_IVLEN);
|
||||||
|
if (p != NULL) {
|
||||||
|
if (!OSSL_PARAM_get_size_t(p, &len)) {
|
||||||
|
ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_GET_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (len == 0 || len > CHACHA20_POLY1305_MAX_IVLEN) {
|
||||||
|
ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_IV_LENGTH);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
ctx->nonce_len = len;
|
||||||
|
}
|
||||||
|
|
||||||
|
p = OSSL_PARAM_locate_const(params, OSSL_CIPHER_PARAM_AEAD_TAG);
|
||||||
|
if (p != NULL) {
|
||||||
|
if (p->data_type != OSSL_PARAM_OCTET_STRING) {
|
||||||
|
ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_GET_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (p->data_size == 0 || p->data_size > POLY1305_BLOCK_SIZE) {
|
||||||
|
ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_TAGLEN);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (p->data != NULL) {
|
||||||
|
if (ctx->base.enc) {
|
||||||
|
ERR_raise(ERR_LIB_PROV, PROV_R_TAG_NOT_NEEDED);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
memcpy(ctx->tag, p->data, p->data_size);
|
||||||
|
}
|
||||||
|
ctx->tag_len = p->data_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
p = OSSL_PARAM_locate_const(params, OSSL_CIPHER_PARAM_AEAD_TLS1_AAD);
|
||||||
|
if (p != NULL) {
|
||||||
|
if (p->data_type != OSSL_PARAM_OCTET_STRING) {
|
||||||
|
ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_GET_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
len = hw->tls_init(&ctx->base, p->data, p->data_size);
|
||||||
|
if (len == 0) {
|
||||||
|
ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_DATA);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
ctx->tls_aad_pad_sz = len;
|
||||||
|
}
|
||||||
|
|
||||||
|
p = OSSL_PARAM_locate_const(params, OSSL_CIPHER_PARAM_AEAD_TLS1_IV_FIXED);
|
||||||
|
if (p != NULL) {
|
||||||
|
if (p->data_type != OSSL_PARAM_OCTET_STRING) {
|
||||||
|
ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_GET_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (hw->tls_iv_set_fixed(&ctx->base, p->data, p->data_size) == 0) {
|
||||||
|
ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_IVLEN);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* ignore OSSL_CIPHER_PARAM_AEAD_MAC_KEY */
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int chacha20_poly1305_einit(void *vctx, const unsigned char *key,
|
||||||
|
size_t keylen, const unsigned char *iv,
|
||||||
|
size_t ivlen)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = cipher_generic_einit(vctx, key, keylen, iv, ivlen);
|
||||||
|
if (ret && iv != NULL) {
|
||||||
|
PROV_CIPHER_CTX *ctx = (PROV_CIPHER_CTX *)vctx;
|
||||||
|
PROV_CIPHER_HW_CHACHA20_POLY1305 *hw =
|
||||||
|
(PROV_CIPHER_HW_CHACHA20_POLY1305 *)ctx->hw;
|
||||||
|
|
||||||
|
hw->initiv(ctx);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int chacha20_poly1305_dinit(void *vctx, const unsigned char *key,
|
||||||
|
size_t keylen, const unsigned char *iv,
|
||||||
|
size_t ivlen)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = cipher_generic_dinit(vctx, key, keylen, iv, ivlen);
|
||||||
|
if (ret && iv != NULL) {
|
||||||
|
PROV_CIPHER_CTX *ctx = (PROV_CIPHER_CTX *)vctx;
|
||||||
|
PROV_CIPHER_HW_CHACHA20_POLY1305 *hw =
|
||||||
|
(PROV_CIPHER_HW_CHACHA20_POLY1305 *)ctx->hw;
|
||||||
|
|
||||||
|
hw->initiv(ctx);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int chacha20_poly1305_cipher(void *vctx, unsigned char *out,
|
||||||
|
size_t *outl, size_t outsize,
|
||||||
|
const unsigned char *in, size_t inl)
|
||||||
|
{
|
||||||
|
PROV_CIPHER_CTX *ctx = (PROV_CIPHER_CTX *)vctx;
|
||||||
|
PROV_CIPHER_HW_CHACHA20_POLY1305 *hw =
|
||||||
|
(PROV_CIPHER_HW_CHACHA20_POLY1305 *)ctx->hw;
|
||||||
|
|
||||||
|
if (outsize < inl) {
|
||||||
|
ERR_raise(ERR_LIB_PROV, PROV_R_OUTPUT_BUFFER_TOO_SMALL);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!hw->aead_cipher(ctx, out, outl, in, inl))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
*outl = inl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int chacha20_poly1305_final(void *vctx, unsigned char *out, size_t *outl,
|
||||||
|
size_t outsize)
|
||||||
|
{
|
||||||
|
PROV_CIPHER_CTX *ctx = (PROV_CIPHER_CTX *)vctx;
|
||||||
|
PROV_CIPHER_HW_CHACHA20_POLY1305 *hw =
|
||||||
|
(PROV_CIPHER_HW_CHACHA20_POLY1305 *)ctx->hw;
|
||||||
|
|
||||||
|
if (hw->aead_cipher(ctx, out, outl, NULL, 0) <= 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
*outl = 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* chacha20_poly1305_functions */
|
||||||
|
const OSSL_DISPATCH chacha20_poly1305_functions[] = {
|
||||||
|
{ OSSL_FUNC_CIPHER_NEWCTX, (void (*)(void))chacha20_poly1305_newctx },
|
||||||
|
{ OSSL_FUNC_CIPHER_FREECTX, (void (*)(void))chacha20_poly1305_freectx },
|
||||||
|
{ OSSL_FUNC_CIPHER_ENCRYPT_INIT, (void (*)(void))chacha20_poly1305_einit },
|
||||||
|
{ OSSL_FUNC_CIPHER_DECRYPT_INIT, (void (*)(void))chacha20_poly1305_dinit },
|
||||||
|
{ OSSL_FUNC_CIPHER_UPDATE, (void (*)(void))chacha20_poly1305_update },
|
||||||
|
{ OSSL_FUNC_CIPHER_FINAL, (void (*)(void))chacha20_poly1305_final },
|
||||||
|
{ OSSL_FUNC_CIPHER_CIPHER, (void (*)(void))chacha20_poly1305_cipher },
|
||||||
|
{ OSSL_FUNC_CIPHER_GET_PARAMS,
|
||||||
|
(void (*)(void))chacha20_poly1305_get_params },
|
||||||
|
{ OSSL_FUNC_CIPHER_GETTABLE_PARAMS,
|
||||||
|
(void (*)(void))chacha20_poly1305_gettable_params },
|
||||||
|
{ OSSL_FUNC_CIPHER_GET_CTX_PARAMS,
|
||||||
|
(void (*)(void))chacha20_poly1305_get_ctx_params },
|
||||||
|
{ OSSL_FUNC_CIPHER_GETTABLE_CTX_PARAMS,
|
||||||
|
(void (*)(void))chacha20_poly1305_gettable_ctx_params },
|
||||||
|
{ OSSL_FUNC_CIPHER_SET_CTX_PARAMS,
|
||||||
|
(void (*)(void))chacha20_poly1305_set_ctx_params },
|
||||||
|
{ OSSL_FUNC_CIPHER_SETTABLE_CTX_PARAMS,
|
||||||
|
(void (*)(void))chacha20_poly1305_settable_ctx_params },
|
||||||
|
{ 0, NULL }
|
||||||
|
};
|
||||||
|
|
43
providers/implementations/ciphers/cipher_chacha20_poly1305.h
Normal file
43
providers/implementations/ciphers/cipher_chacha20_poly1305.h
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2019 The OpenSSL Project Authors. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||||
|
* this file except in compliance with the License. You can obtain a copy
|
||||||
|
* in the file LICENSE in the source distribution or at
|
||||||
|
* https://www.openssl.org/source/license.html
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Dispatch functions for chacha20_poly1305 cipher */
|
||||||
|
|
||||||
|
#include "include/crypto/poly1305.h"
|
||||||
|
#include "cipher_chacha20.h"
|
||||||
|
|
||||||
|
#define NO_TLS_PAYLOAD_LENGTH ((size_t)-1)
|
||||||
|
#define CHACHA20_POLY1305_IVLEN 12
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PROV_CIPHER_CTX base; /* must be first */
|
||||||
|
PROV_CHACHA20_CTX chacha;
|
||||||
|
POLY1305 poly1305;
|
||||||
|
unsigned int nonce[12 / 4];
|
||||||
|
unsigned char tag[POLY1305_BLOCK_SIZE];
|
||||||
|
unsigned char tls_aad[POLY1305_BLOCK_SIZE];
|
||||||
|
struct { uint64_t aad, text; } len;
|
||||||
|
unsigned int aad : 1;
|
||||||
|
unsigned int mac_inited : 1;
|
||||||
|
size_t tag_len, nonce_len;
|
||||||
|
size_t tls_payload_length;
|
||||||
|
size_t tls_aad_pad_sz;
|
||||||
|
} PROV_CHACHA20_POLY1305_CTX;
|
||||||
|
|
||||||
|
typedef struct prov_cipher_hw_chacha_aead_st {
|
||||||
|
PROV_CIPHER_HW base; /* must be first */
|
||||||
|
int (*aead_cipher)(PROV_CIPHER_CTX *dat, unsigned char *out, size_t *outl,
|
||||||
|
const unsigned char *in, size_t len);
|
||||||
|
int (*initiv)(PROV_CIPHER_CTX *ctx);
|
||||||
|
int (*tls_init)(PROV_CIPHER_CTX *ctx, unsigned char *aad, size_t alen);
|
||||||
|
int (*tls_iv_set_fixed)(PROV_CIPHER_CTX *ctx, unsigned char *fixed,
|
||||||
|
size_t flen);
|
||||||
|
} PROV_CIPHER_HW_CHACHA20_POLY1305;
|
||||||
|
|
||||||
|
const PROV_CIPHER_HW *PROV_CIPHER_HW_chacha20_poly1305(size_t keybits);
|
408
providers/implementations/ciphers/cipher_chacha20_poly1305_hw.c
Normal file
408
providers/implementations/ciphers/cipher_chacha20_poly1305_hw.c
Normal file
@ -0,0 +1,408 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2019 The OpenSSL Project Authors. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||||
|
* this file except in compliance with the License. You can obtain a copy
|
||||||
|
* in the file LICENSE in the source distribution or at
|
||||||
|
* https://www.openssl.org/source/license.html
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* chacha20_poly1305 cipher implementation */
|
||||||
|
|
||||||
|
#include "cipher_chacha20_poly1305.h"
|
||||||
|
|
||||||
|
static int chacha_poly1305_tls_init(PROV_CIPHER_CTX *bctx,
|
||||||
|
unsigned char *aad, size_t alen)
|
||||||
|
{
|
||||||
|
unsigned int len;
|
||||||
|
PROV_CHACHA20_POLY1305_CTX *ctx = (PROV_CHACHA20_POLY1305_CTX *)bctx;
|
||||||
|
|
||||||
|
if (alen != EVP_AEAD_TLS1_AAD_LEN)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
memcpy(ctx->tls_aad, aad, EVP_AEAD_TLS1_AAD_LEN);
|
||||||
|
len = aad[EVP_AEAD_TLS1_AAD_LEN - 2] << 8 | aad[EVP_AEAD_TLS1_AAD_LEN - 1];
|
||||||
|
aad = ctx->tls_aad;
|
||||||
|
if (!bctx->enc) {
|
||||||
|
if (len < POLY1305_BLOCK_SIZE)
|
||||||
|
return 0;
|
||||||
|
len -= POLY1305_BLOCK_SIZE; /* discount attached tag */
|
||||||
|
aad[EVP_AEAD_TLS1_AAD_LEN - 2] = (unsigned char)(len >> 8);
|
||||||
|
aad[EVP_AEAD_TLS1_AAD_LEN - 1] = (unsigned char)len;
|
||||||
|
}
|
||||||
|
ctx->tls_payload_length = len;
|
||||||
|
|
||||||
|
/* merge record sequence number as per RFC7905 */
|
||||||
|
ctx->chacha.counter[1] = ctx->nonce[0];
|
||||||
|
ctx->chacha.counter[2] = ctx->nonce[1] ^ CHACHA_U8TOU32(aad);
|
||||||
|
ctx->chacha.counter[3] = ctx->nonce[2] ^ CHACHA_U8TOU32(aad+4);
|
||||||
|
ctx->mac_inited = 0;
|
||||||
|
|
||||||
|
return POLY1305_BLOCK_SIZE; /* tag length */
|
||||||
|
}
|
||||||
|
|
||||||
|
static int chacha_poly1305_tls_iv_set_fixed(PROV_CIPHER_CTX *bctx,
|
||||||
|
unsigned char *fixed, size_t flen)
|
||||||
|
{
|
||||||
|
PROV_CHACHA20_POLY1305_CTX *ctx = (PROV_CHACHA20_POLY1305_CTX *)bctx;
|
||||||
|
|
||||||
|
if (flen != CHACHA20_POLY1305_IVLEN)
|
||||||
|
return 0;
|
||||||
|
ctx->nonce[0] = ctx->chacha.counter[1] = CHACHA_U8TOU32(fixed);
|
||||||
|
ctx->nonce[1] = ctx->chacha.counter[2] = CHACHA_U8TOU32(fixed + 4);
|
||||||
|
ctx->nonce[2] = ctx->chacha.counter[3] = CHACHA_U8TOU32(fixed + 8);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int chacha20_poly1305_initkey(PROV_CIPHER_CTX *bctx,
|
||||||
|
const unsigned char *key, size_t keylen)
|
||||||
|
{
|
||||||
|
PROV_CHACHA20_POLY1305_CTX *ctx = (PROV_CHACHA20_POLY1305_CTX *)bctx;
|
||||||
|
|
||||||
|
ctx->len.aad = 0;
|
||||||
|
ctx->len.text = 0;
|
||||||
|
ctx->aad = 0;
|
||||||
|
ctx->mac_inited = 0;
|
||||||
|
ctx->tls_payload_length = NO_TLS_PAYLOAD_LENGTH;
|
||||||
|
|
||||||
|
if (bctx->enc)
|
||||||
|
return chacha20_einit(&ctx->chacha, key, keylen, NULL, 0);
|
||||||
|
else
|
||||||
|
return chacha20_dinit(&ctx->chacha, key, keylen, NULL, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int chacha20_poly1305_initiv(PROV_CIPHER_CTX *bctx)
|
||||||
|
{
|
||||||
|
PROV_CHACHA20_POLY1305_CTX *ctx = (PROV_CHACHA20_POLY1305_CTX *)bctx;
|
||||||
|
unsigned char tempiv[CHACHA_CTR_SIZE] = { 0 };
|
||||||
|
int ret = 1;
|
||||||
|
|
||||||
|
/* pad on the left */
|
||||||
|
if (ctx->nonce_len <= CHACHA_CTR_SIZE) {
|
||||||
|
memcpy(tempiv + CHACHA_CTR_SIZE - ctx->nonce_len, bctx->oiv,
|
||||||
|
ctx->nonce_len);
|
||||||
|
|
||||||
|
if (bctx->enc)
|
||||||
|
ret = chacha20_einit(&ctx->chacha, NULL, 0, tempiv, sizeof(tempiv));
|
||||||
|
else
|
||||||
|
ret = chacha20_dinit(&ctx->chacha, NULL, 0, tempiv, sizeof(tempiv));
|
||||||
|
ctx->nonce[0] = ctx->chacha.counter[1];
|
||||||
|
ctx->nonce[1] = ctx->chacha.counter[2];
|
||||||
|
ctx->nonce[2] = ctx->chacha.counter[3];
|
||||||
|
bctx->iv_set = 1;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if !defined(OPENSSL_SMALL_FOOTPRINT)
|
||||||
|
|
||||||
|
# if defined(POLY1305_ASM) && (defined(__x86_64) || defined(__x86_64__) \
|
||||||
|
|| defined(_M_AMD64) || defined(_M_X64))
|
||||||
|
# define XOR128_HELPERS
|
||||||
|
void *xor128_encrypt_n_pad(void *out, const void *inp, void *otp, size_t len);
|
||||||
|
void *xor128_decrypt_n_pad(void *out, const void *inp, void *otp, size_t len);
|
||||||
|
static const unsigned char zero[4 * CHACHA_BLK_SIZE] = { 0 };
|
||||||
|
# else
|
||||||
|
static const unsigned char zero[2 * CHACHA_BLK_SIZE] = { 0 };
|
||||||
|
# endif
|
||||||
|
|
||||||
|
static int chacha20_poly1305_tls_cipher(PROV_CIPHER_CTX *bctx,
|
||||||
|
unsigned char *out,
|
||||||
|
size_t *out_padlen,
|
||||||
|
const unsigned char *in, size_t len)
|
||||||
|
{
|
||||||
|
PROV_CHACHA20_POLY1305_CTX *ctx = (PROV_CHACHA20_POLY1305_CTX *)bctx;
|
||||||
|
POLY1305 *poly = &ctx->poly1305;
|
||||||
|
size_t tail, tohash_len, buf_len, plen = ctx->tls_payload_length;
|
||||||
|
unsigned char *buf, *tohash, *ctr, storage[sizeof(zero) + 32];
|
||||||
|
|
||||||
|
const union {
|
||||||
|
long one;
|
||||||
|
char little;
|
||||||
|
} is_endian = { 1 };
|
||||||
|
|
||||||
|
if (len != plen + POLY1305_BLOCK_SIZE)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
buf = storage + ((0 - (size_t)storage) & 15); /* align */
|
||||||
|
ctr = buf + CHACHA_BLK_SIZE;
|
||||||
|
tohash = buf + CHACHA_BLK_SIZE - POLY1305_BLOCK_SIZE;
|
||||||
|
|
||||||
|
# ifdef XOR128_HELPERS
|
||||||
|
if (plen <= 3 * CHACHA_BLK_SIZE) {
|
||||||
|
ctx->chacha.counter[0] = 0;
|
||||||
|
buf_len = (plen + 2 * CHACHA_BLK_SIZE - 1) & (0 - CHACHA_BLK_SIZE);
|
||||||
|
ChaCha20_ctr32(buf, zero, buf_len, ctx->chacha.key.d, ctx->chacha.counter);
|
||||||
|
Poly1305_Init(poly, buf);
|
||||||
|
ctx->chacha.partial_len = 0;
|
||||||
|
memcpy(tohash, ctx->tls_aad, POLY1305_BLOCK_SIZE);
|
||||||
|
tohash_len = POLY1305_BLOCK_SIZE;
|
||||||
|
ctx->len.aad = EVP_AEAD_TLS1_AAD_LEN;
|
||||||
|
ctx->len.text = plen;
|
||||||
|
|
||||||
|
if (plen) {
|
||||||
|
if (ctx->enc)
|
||||||
|
ctr = xor128_encrypt_n_pad(out, in, ctr, plen);
|
||||||
|
else
|
||||||
|
ctr = xor128_decrypt_n_pad(out, in, ctr, plen);
|
||||||
|
|
||||||
|
in += plen;
|
||||||
|
out += plen;
|
||||||
|
tohash_len = (size_t)(ctr - tohash);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# else
|
||||||
|
if (plen <= CHACHA_BLK_SIZE) {
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
ctx->chacha.counter[0] = 0;
|
||||||
|
ChaCha20_ctr32(buf, zero, (buf_len = 2 * CHACHA_BLK_SIZE),
|
||||||
|
ctx->chacha.key.d, ctx->chacha.counter);
|
||||||
|
Poly1305_Init(poly, buf);
|
||||||
|
ctx->chacha.partial_len = 0;
|
||||||
|
memcpy(tohash, ctx->tls_aad, POLY1305_BLOCK_SIZE);
|
||||||
|
tohash_len = POLY1305_BLOCK_SIZE;
|
||||||
|
ctx->len.aad = EVP_AEAD_TLS1_AAD_LEN;
|
||||||
|
ctx->len.text = plen;
|
||||||
|
|
||||||
|
if (bctx->enc) {
|
||||||
|
for (i = 0; i < plen; i++)
|
||||||
|
out[i] = ctr[i] ^= in[i];
|
||||||
|
} else {
|
||||||
|
for (i = 0; i < plen; i++) {
|
||||||
|
unsigned char c = in[i];
|
||||||
|
|
||||||
|
out[i] = ctr[i] ^ c;
|
||||||
|
ctr[i] = c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
in += i;
|
||||||
|
out += i;
|
||||||
|
|
||||||
|
tail = (0 - i) & (POLY1305_BLOCK_SIZE - 1);
|
||||||
|
memset(ctr + i, 0, tail);
|
||||||
|
ctr += i + tail;
|
||||||
|
tohash_len += i + tail;
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
else {
|
||||||
|
ctx->chacha.counter[0] = 0;
|
||||||
|
ChaCha20_ctr32(buf, zero, (buf_len = CHACHA_BLK_SIZE),
|
||||||
|
ctx->chacha.key.d, ctx->chacha.counter);
|
||||||
|
Poly1305_Init(poly, buf);
|
||||||
|
ctx->chacha.counter[0] = 1;
|
||||||
|
ctx->chacha.partial_len = 0;
|
||||||
|
Poly1305_Update(poly, ctx->tls_aad, POLY1305_BLOCK_SIZE);
|
||||||
|
tohash = ctr;
|
||||||
|
tohash_len = 0;
|
||||||
|
ctx->len.aad = EVP_AEAD_TLS1_AAD_LEN;
|
||||||
|
ctx->len.text = plen;
|
||||||
|
|
||||||
|
if (bctx->enc) {
|
||||||
|
ChaCha20_ctr32(out, in, plen, ctx->chacha.key.d, ctx->chacha.counter);
|
||||||
|
Poly1305_Update(poly, out, plen);
|
||||||
|
} else {
|
||||||
|
Poly1305_Update(poly, in, plen);
|
||||||
|
ChaCha20_ctr32(out, in, plen, ctx->chacha.key.d, ctx->chacha.counter);
|
||||||
|
}
|
||||||
|
|
||||||
|
in += plen;
|
||||||
|
out += plen;
|
||||||
|
tail = (0 - plen) & (POLY1305_BLOCK_SIZE - 1);
|
||||||
|
Poly1305_Update(poly, zero, tail);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_endian.little) {
|
||||||
|
memcpy(ctr, (unsigned char *)&ctx->len, POLY1305_BLOCK_SIZE);
|
||||||
|
} else {
|
||||||
|
ctr[0] = (unsigned char)(ctx->len.aad);
|
||||||
|
ctr[1] = (unsigned char)(ctx->len.aad>>8);
|
||||||
|
ctr[2] = (unsigned char)(ctx->len.aad>>16);
|
||||||
|
ctr[3] = (unsigned char)(ctx->len.aad>>24);
|
||||||
|
ctr[4] = (unsigned char)(ctx->len.aad>>32);
|
||||||
|
ctr[5] = (unsigned char)(ctx->len.aad>>40);
|
||||||
|
ctr[6] = (unsigned char)(ctx->len.aad>>48);
|
||||||
|
ctr[7] = (unsigned char)(ctx->len.aad>>56);
|
||||||
|
|
||||||
|
ctr[8] = (unsigned char)(ctx->len.text);
|
||||||
|
ctr[9] = (unsigned char)(ctx->len.text>>8);
|
||||||
|
ctr[10] = (unsigned char)(ctx->len.text>>16);
|
||||||
|
ctr[11] = (unsigned char)(ctx->len.text>>24);
|
||||||
|
ctr[12] = (unsigned char)(ctx->len.text>>32);
|
||||||
|
ctr[13] = (unsigned char)(ctx->len.text>>40);
|
||||||
|
ctr[14] = (unsigned char)(ctx->len.text>>48);
|
||||||
|
ctr[15] = (unsigned char)(ctx->len.text>>56);
|
||||||
|
}
|
||||||
|
tohash_len += POLY1305_BLOCK_SIZE;
|
||||||
|
|
||||||
|
Poly1305_Update(poly, tohash, tohash_len);
|
||||||
|
OPENSSL_cleanse(buf, buf_len);
|
||||||
|
Poly1305_Final(poly, bctx->enc ? ctx->tag : tohash);
|
||||||
|
|
||||||
|
ctx->tls_payload_length = NO_TLS_PAYLOAD_LENGTH;
|
||||||
|
|
||||||
|
if (bctx->enc) {
|
||||||
|
memcpy(out, ctx->tag, POLY1305_BLOCK_SIZE);
|
||||||
|
} else {
|
||||||
|
if (CRYPTO_memcmp(tohash, in, POLY1305_BLOCK_SIZE)) {
|
||||||
|
if (len > POLY1305_BLOCK_SIZE)
|
||||||
|
memset(out - (len - POLY1305_BLOCK_SIZE), 0,
|
||||||
|
len - POLY1305_BLOCK_SIZE);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
*out_padlen = len;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static const unsigned char zero[CHACHA_BLK_SIZE] = { 0 };
|
||||||
|
#endif /* OPENSSL_SMALL_FOOTPRINT */
|
||||||
|
|
||||||
|
static int chacha20_poly1305_aead_cipher(PROV_CIPHER_CTX *bctx,
|
||||||
|
unsigned char *out, size_t *outl,
|
||||||
|
const unsigned char *in, size_t inl)
|
||||||
|
{
|
||||||
|
PROV_CHACHA20_POLY1305_CTX *ctx = (PROV_CHACHA20_POLY1305_CTX *)bctx;
|
||||||
|
POLY1305 *poly = &ctx->poly1305;
|
||||||
|
size_t rem, plen = ctx->tls_payload_length;
|
||||||
|
size_t olen = 0;
|
||||||
|
int rv = 0;
|
||||||
|
|
||||||
|
const union {
|
||||||
|
long one;
|
||||||
|
char little;
|
||||||
|
} is_endian = { 1 };
|
||||||
|
|
||||||
|
if (!ctx->mac_inited) {
|
||||||
|
#if !defined(OPENSSL_SMALL_FOOTPRINT)
|
||||||
|
if (plen != NO_TLS_PAYLOAD_LENGTH && out != NULL) {
|
||||||
|
return chacha20_poly1305_tls_cipher(bctx, out, outl, in, inl);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
ctx->chacha.counter[0] = 0;
|
||||||
|
ChaCha20_ctr32(ctx->chacha.buf, zero, CHACHA_BLK_SIZE,
|
||||||
|
ctx->chacha.key.d, ctx->chacha.counter);
|
||||||
|
Poly1305_Init(poly, ctx->chacha.buf);
|
||||||
|
ctx->chacha.counter[0] = 1;
|
||||||
|
ctx->chacha.partial_len = 0;
|
||||||
|
ctx->len.aad = ctx->len.text = 0;
|
||||||
|
ctx->mac_inited = 1;
|
||||||
|
if (plen != NO_TLS_PAYLOAD_LENGTH) {
|
||||||
|
Poly1305_Update(poly, ctx->tls_aad, EVP_AEAD_TLS1_AAD_LEN);
|
||||||
|
ctx->len.aad = EVP_AEAD_TLS1_AAD_LEN;
|
||||||
|
ctx->aad = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (in != NULL) { /* aad or text */
|
||||||
|
if (out == NULL) { /* aad */
|
||||||
|
Poly1305_Update(poly, in, inl);
|
||||||
|
ctx->len.aad += inl;
|
||||||
|
ctx->aad = 1;
|
||||||
|
goto finish;
|
||||||
|
} else { /* plain- or ciphertext */
|
||||||
|
if (ctx->aad) { /* wrap up aad */
|
||||||
|
if ((rem = (size_t)ctx->len.aad % POLY1305_BLOCK_SIZE))
|
||||||
|
Poly1305_Update(poly, zero, POLY1305_BLOCK_SIZE - rem);
|
||||||
|
ctx->aad = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx->tls_payload_length = NO_TLS_PAYLOAD_LENGTH;
|
||||||
|
if (plen == NO_TLS_PAYLOAD_LENGTH)
|
||||||
|
plen = inl;
|
||||||
|
else if (inl != plen + POLY1305_BLOCK_SIZE)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
if (bctx->enc) { /* plaintext */
|
||||||
|
ctx->chacha.base.hw->cipher(&ctx->chacha.base, out, in, plen);
|
||||||
|
Poly1305_Update(poly, out, plen);
|
||||||
|
in += plen;
|
||||||
|
out += plen;
|
||||||
|
ctx->len.text += plen;
|
||||||
|
} else { /* ciphertext */
|
||||||
|
Poly1305_Update(poly, in, plen);
|
||||||
|
ctx->chacha.base.hw->cipher(&ctx->chacha.base, out, in, plen);
|
||||||
|
in += plen;
|
||||||
|
out += plen;
|
||||||
|
ctx->len.text += plen;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* explicit final, or tls mode */
|
||||||
|
if (in == NULL || inl != plen) {
|
||||||
|
|
||||||
|
unsigned char temp[POLY1305_BLOCK_SIZE];
|
||||||
|
|
||||||
|
if (ctx->aad) { /* wrap up aad */
|
||||||
|
if ((rem = (size_t)ctx->len.aad % POLY1305_BLOCK_SIZE))
|
||||||
|
Poly1305_Update(poly, zero, POLY1305_BLOCK_SIZE - rem);
|
||||||
|
ctx->aad = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((rem = (size_t)ctx->len.text % POLY1305_BLOCK_SIZE))
|
||||||
|
Poly1305_Update(poly, zero, POLY1305_BLOCK_SIZE - rem);
|
||||||
|
|
||||||
|
if (is_endian.little) {
|
||||||
|
Poly1305_Update(poly, (unsigned char *)&ctx->len,
|
||||||
|
POLY1305_BLOCK_SIZE);
|
||||||
|
} else {
|
||||||
|
temp[0] = (unsigned char)(ctx->len.aad);
|
||||||
|
temp[1] = (unsigned char)(ctx->len.aad>>8);
|
||||||
|
temp[2] = (unsigned char)(ctx->len.aad>>16);
|
||||||
|
temp[3] = (unsigned char)(ctx->len.aad>>24);
|
||||||
|
temp[4] = (unsigned char)(ctx->len.aad>>32);
|
||||||
|
temp[5] = (unsigned char)(ctx->len.aad>>40);
|
||||||
|
temp[6] = (unsigned char)(ctx->len.aad>>48);
|
||||||
|
temp[7] = (unsigned char)(ctx->len.aad>>56);
|
||||||
|
temp[8] = (unsigned char)(ctx->len.text);
|
||||||
|
temp[9] = (unsigned char)(ctx->len.text>>8);
|
||||||
|
temp[10] = (unsigned char)(ctx->len.text>>16);
|
||||||
|
temp[11] = (unsigned char)(ctx->len.text>>24);
|
||||||
|
temp[12] = (unsigned char)(ctx->len.text>>32);
|
||||||
|
temp[13] = (unsigned char)(ctx->len.text>>40);
|
||||||
|
temp[14] = (unsigned char)(ctx->len.text>>48);
|
||||||
|
temp[15] = (unsigned char)(ctx->len.text>>56);
|
||||||
|
Poly1305_Update(poly, temp, POLY1305_BLOCK_SIZE);
|
||||||
|
}
|
||||||
|
Poly1305_Final(poly, bctx->enc ? ctx->tag : temp);
|
||||||
|
ctx->mac_inited = 0;
|
||||||
|
|
||||||
|
if (in != NULL && inl != plen) {
|
||||||
|
if (bctx->enc) {
|
||||||
|
memcpy(out, ctx->tag, POLY1305_BLOCK_SIZE);
|
||||||
|
} else {
|
||||||
|
if (CRYPTO_memcmp(temp, in, POLY1305_BLOCK_SIZE)) {
|
||||||
|
memset(out - plen, 0, plen);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (!bctx->enc) {
|
||||||
|
if (CRYPTO_memcmp(temp, ctx->tag, ctx->tag_len))
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finish:
|
||||||
|
olen = inl;
|
||||||
|
rv = 1;
|
||||||
|
err:
|
||||||
|
*outl = olen;
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const PROV_CIPHER_HW_CHACHA20_POLY1305 chacha20poly1305_hw =
|
||||||
|
{
|
||||||
|
{ chacha20_poly1305_initkey, NULL },
|
||||||
|
chacha20_poly1305_aead_cipher,
|
||||||
|
chacha20_poly1305_initiv,
|
||||||
|
chacha_poly1305_tls_init,
|
||||||
|
chacha_poly1305_tls_iv_set_fixed
|
||||||
|
};
|
||||||
|
|
||||||
|
const PROV_CIPHER_HW *PROV_CIPHER_HW_chacha20_poly1305(size_t keybits)
|
||||||
|
{
|
||||||
|
return (PROV_CIPHER_HW *)&chacha20poly1305_hw;
|
||||||
|
}
|
@ -203,6 +203,13 @@ extern const OSSL_DISPATCH des_cfb8_functions[];
|
|||||||
extern const OSSL_DISPATCH rc440_functions[];
|
extern const OSSL_DISPATCH rc440_functions[];
|
||||||
extern const OSSL_DISPATCH rc4128_functions[];
|
extern const OSSL_DISPATCH rc4128_functions[];
|
||||||
#endif /* OPENSSL_NO_RC4 */
|
#endif /* OPENSSL_NO_RC4 */
|
||||||
|
#ifndef OPENSSL_NO_CHACHA
|
||||||
|
extern const OSSL_DISPATCH chacha20_functions[];
|
||||||
|
# ifndef OPENSSL_NO_POLY1305
|
||||||
|
extern const OSSL_DISPATCH chacha20_poly1305_functions[];
|
||||||
|
# endif /* OPENSSL_NO_POLY1305 */
|
||||||
|
#endif /* OPENSSL_NO_CHACHA */
|
||||||
|
|
||||||
|
|
||||||
/* MACs */
|
/* MACs */
|
||||||
extern const OSSL_DISPATCH blake2bmac_functions[];
|
extern const OSSL_DISPATCH blake2bmac_functions[];
|
||||||
|
@ -14,12 +14,6 @@
|
|||||||
#include <openssl/err.h>
|
#include <openssl/err.h>
|
||||||
|
|
||||||
#include "crypto/poly1305.h"
|
#include "crypto/poly1305.h"
|
||||||
/*
|
|
||||||
* TODO(3.0) when poly1305 has moved entirely to our providers, this
|
|
||||||
* header should be moved to the provider include directory. For the
|
|
||||||
* moment, crypto/poly1305/poly1305_ameth.c has us stuck.
|
|
||||||
*/
|
|
||||||
#include "../../../crypto/poly1305/poly1305_local.h"
|
|
||||||
|
|
||||||
#include "prov/providercommonerr.h"
|
#include "prov/providercommonerr.h"
|
||||||
#include "prov/implementations.h"
|
#include "prov/implementations.h"
|
||||||
|
@ -14,7 +14,6 @@
|
|||||||
|
|
||||||
#include "testutil.h"
|
#include "testutil.h"
|
||||||
#include "crypto/poly1305.h"
|
#include "crypto/poly1305.h"
|
||||||
#include "../crypto/poly1305/poly1305_local.h"
|
|
||||||
#include "internal/nelem.h"
|
#include "internal/nelem.h"
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -59,6 +59,9 @@ push @defltfiles, @rc5files unless disabled("rc5");
|
|||||||
my @rc2files = qw( evpciph_rc2.txt );
|
my @rc2files = qw( evpciph_rc2.txt );
|
||||||
push @defltfiles, @rc2files unless disabled("rc2");
|
push @defltfiles, @rc2files unless disabled("rc2");
|
||||||
|
|
||||||
|
my @chachafiles = qw( evpciph_chacha.txt );
|
||||||
|
push @defltfiles, @chachafiles unless disabled("chacha");
|
||||||
|
|
||||||
plan tests =>
|
plan tests =>
|
||||||
($no_fips ? 0 : 1) # FIPS install test
|
($no_fips ? 0 : 1) # FIPS install test
|
||||||
+ (scalar(@configs) * scalar(@files))
|
+ (scalar(@configs) * scalar(@files))
|
||||||
|
@ -2462,190 +2462,3 @@ AAD = 8008315ebf2e6fe020e8f5eb
|
|||||||
Tag = 3615b7f90a651de15da20fb6
|
Tag = 3615b7f90a651de15da20fb6
|
||||||
Plaintext = f57af5fd4ae19562976ec57a5a7ad55a5af5c5e5c5fdf5c55ad57a4a7272d57262e9729566ed66e97ac54a4a5a7ad5e15ae5fdd5fd5ac5d56ae56ad5c572d54ae54ac55a956afd6aed5a4ac562957a9516991691d572fd14e97ae962ed7a9f4a955af572e162f57a956666e17ae1f54a95f566d54a66e16e4afd6a9f7ae1c5c55ae5d56afde916c5e94a6ec56695e14afde1148416e94ad57ac5146ed59d1cc5
|
Plaintext = f57af5fd4ae19562976ec57a5a7ad55a5af5c5e5c5fdf5c55ad57a4a7272d57262e9729566ed66e97ac54a4a5a7ad5e15ae5fdd5fd5ac5d56ae56ad5c572d54ae54ac55a956afd6aed5a4ac562957a9516991691d572fd14e97ae962ed7a9f4a955af572e162f57a956666e17ae1f54a95f566d54a66e16e4afd6a9f7ae1c5c55ae5d56afde916c5e94a6ec56695e14afde1148416e94ad57ac5146ed59d1cc5
|
||||||
Ciphertext = ff78128ee18ee3cb9fb0d20726a017ff67fbd09d3a4c38aa32f6d306d3fdda378e459b83ed005507449d6cd981a4c1e3ff4193870c276ef09b6317a01a2283206ae4b4be0d0b235422c8abb00122410656b75e1ffc7fb49c0d0c5d6169aa7623610579968037aee8e83fc26264ea866590fd620aa3c0a5f323d953aa7f8defb0d0d60ab5a9de44dbaf8eae74ea3ab5f30594154f405fd630aa4c4d5603efdfa1
|
Ciphertext = ff78128ee18ee3cb9fb0d20726a017ff67fbd09d3a4c38aa32f6d306d3fdda378e459b83ed005507449d6cd981a4c1e3ff4193870c276ef09b6317a01a2283206ae4b4be0d0b235422c8abb00122410656b75e1ffc7fb49c0d0c5d6169aa7623610579968037aee8e83fc26264ea866590fd620aa3c0a5f323d953aa7f8defb0d0d60ab5a9de44dbaf8eae74ea3ab5f30594154f405fd630aa4c4d5603efdfa1
|
||||||
|
|
||||||
|
|
||||||
Title = Chacha20 test vectors from RFC7539
|
|
||||||
|
|
||||||
# A.1 Test Vector 1
|
|
||||||
Cipher = chacha20
|
|
||||||
Key = 0000000000000000000000000000000000000000000000000000000000000000
|
|
||||||
IV = 00000000000000000000000000000000
|
|
||||||
Plaintext = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
||||||
Ciphertext = 76b8e0ada0f13d90405d6ae55386bd28bdd219b8a08ded1aa836efcc8b770dc7da41597c5157488d7724e03fb8d84a376a43b8f41518a11cc387b669b2ee6586
|
|
||||||
|
|
||||||
# A.1 Test Vector 2
|
|
||||||
Cipher = chacha20
|
|
||||||
Key = 0000000000000000000000000000000000000000000000000000000000000000
|
|
||||||
IV = 01000000000000000000000000000000
|
|
||||||
Plaintext = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
||||||
Ciphertext = 9f07e7be5551387a98ba977c732d080dcb0f29a048e3656912c6533e32ee7aed29b721769ce64e43d57133b074d839d531ed1f28510afb45ace10a1f4b794d6f
|
|
||||||
|
|
||||||
# A.2 Test Vector 1 is the same as A.1 Test Vector 1
|
|
||||||
# A.2 Test Vector 2
|
|
||||||
Cipher = chacha20
|
|
||||||
Key = 0000000000000000000000000000000000000000000000000000000000000001
|
|
||||||
#Counter (first 4 bytes) expressed in little-endian order
|
|
||||||
IV = 01000000000000000000000000000002
|
|
||||||
Plaintext = 416e79207375626d697373696f6e20746f20746865204945544620696e74656e6465642062792074686520436f6e7472696275746f7220666f72207075626c69636174696f6e20617320616c6c206f722070617274206f6620616e204945544620496e7465726e65742d4472616674206f722052464320616e6420616e792073746174656d656e74206d6164652077697468696e2074686520636f6e74657874206f6620616e204945544620616374697669747920697320636f6e7369646572656420616e20224945544620436f6e747269627574696f6e222e20537563682073746174656d656e747320696e636c756465206f72616c2073746174656d656e747320696e20494554462073657373696f6e732c2061732077656c6c206173207772697474656e20616e6420656c656374726f6e696320636f6d6d756e69636174696f6e73206d61646520617420616e792074696d65206f7220706c6163652c207768696368206172652061646472657373656420746f
|
|
||||||
Ciphertext = a3fbf07df3fa2fde4f376ca23e82737041605d9f4f4f57bd8cff2c1d4b7955ec2a97948bd3722915c8f3d337f7d370050e9e96d647b7c39f56e031ca5eb6250d4042e02785ececfa4b4bb5e8ead0440e20b6e8db09d881a7c6132f420e52795042bdfa7773d8a9051447b3291ce1411c680465552aa6c405b7764d5e87bea85ad00f8449ed8f72d0d662ab052691ca66424bc86d2df80ea41f43abf937d3259dc4b2d0dfb48a6c9139ddd7f76966e928e635553ba76c5c879d7b35d49eb2e62b0871cdac638939e25e8a1e0ef9d5280fa8ca328b351c3c765989cbcf3daa8b6ccc3aaf9f3979c92b3720fc88dc95ed84a1be059c6499b9fda236e7e818b04b0bc39c1e876b193bfe5569753f88128cc08aaa9b63d1a16f80ef2554d7189c411f5869ca52c5b83fa36ff216b9c1d30062bebcfd2dc5bce0911934fda79a86f6e698ced759c3ff9b6477338f3da4f9cd8514ea9982ccafb341b2384dd902f3d1ab7ac61dd29c6f21ba5b862f3730e37cfdc4fd806c22f221
|
|
||||||
|
|
||||||
# A.2 Test Vector 3
|
|
||||||
Cipher = chacha20
|
|
||||||
Key = 1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0
|
|
||||||
#Counter (first 4 bytes) expressed in little-endian order
|
|
||||||
IV = 2a000000000000000000000000000002
|
|
||||||
Plaintext = 2754776173206272696c6c69672c20616e642074686520736c6974687920746f7665730a446964206779726520616e642067696d626c6520696e2074686520776162653a0a416c6c206d696d737920776572652074686520626f726f676f7665732c0a416e6420746865206d6f6d65207261746873206f757467726162652e
|
|
||||||
Ciphertext = 62e6347f95ed87a45ffae7426f27a1df5fb69110044c0d73118effa95b01e5cf166d3df2d721caf9b21e5fb14c616871fd84c54f9d65b283196c7fe4f60553ebf39c6402c42234e32a356b3e764312a61a5532055716ead6962568f87d3f3f7704c6a8d1bcd1bf4d50d6154b6da731b187b58dfd728afa36757a797ac188d1
|
|
||||||
|
|
||||||
Title = Chacha20
|
|
||||||
|
|
||||||
Cipher = chacha20
|
|
||||||
Key = 0000000000000000000000000000000000000000000000000000000000000001
|
|
||||||
IV = 00000000000000000000000000000000
|
|
||||||
Plaintext = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
||||||
Ciphertext = 4540f05a9f1fb296d7736e7b208e3c96eb4fe1834688d2604f450952ed432d41bbe2a0b6ea7566d2a5d1e7e20d42af2c53d792b1c43fea817e9ad275ae546963
|
|
||||||
|
|
||||||
Cipher = chacha20
|
|
||||||
Key = 0000000000000000000000000000000000000000000000000000000000000000
|
|
||||||
IV = 00000000000000000000000000000001
|
|
||||||
Plaintext = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
||||||
Ciphertext = de9cba7bf3d69ef5e786dc63973f653a0b49e015adbff7134fcb7df137821031e85a050278a7084527214f73efc7fa5b5277062eb7a0433e445f41e31afab757
|
|
||||||
|
|
||||||
Cipher = chacha20
|
|
||||||
Key = 0000000000000000000000000000000000000000000000000000000000000000
|
|
||||||
IV = 00000000000000000100000000000000
|
|
||||||
Plaintext = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
||||||
Ciphertext = ef3fdfd6c61578fbf5cf35bd3dd33b8009631634d21e42ac33960bd138e50d32111e4caf237ee53ca8ad6426194a88545ddc497a0b466e7d6bbdb0041b2f586b
|
|
||||||
|
|
||||||
Cipher = chacha20
|
|
||||||
Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
|
|
||||||
IV = 00000000000000000001020304050607
|
|
||||||
Plaintext = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
||||||
Ciphertext = f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f15916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c507b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb
|
|
||||||
|
|
||||||
Cipher = chacha20
|
|
||||||
Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
|
|
||||||
IV = 00000000000000000001020304050607
|
|
||||||
Plaintext = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
||||||
Ciphertext = f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f15916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c507b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb3ab78fab78c9
|
|
||||||
|
|
||||||
Cipher = chacha20
|
|
||||||
Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
|
|
||||||
IV = 00000000000000000001020304050607
|
|
||||||
Plaintext = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
||||||
Ciphertext = f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f15916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c507b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb3ab78fab78c94213668bbbd394c5de93b853178addd6b97f9fa1ec3e56c00c9ddff0a44a204241175a4cab0f961ba53ede9bdf960b94f9829b1f3414726429b362c5b538e391520f489b7ed8d20ae3fd49e9e259e44397514d618c96c4846be3c680bdc11c71dcbbe29ccf80d62a0938fa549391e6ea57ecbe2606790ec15d2224ae307c144226b7c4e8c2f97d2a1d67852d29beba110edd445197012062a393a9c92803ad3b4f31d7bc6033ccf7932cfed3f019044d25905916777286f82f9a4cc1ffe430ffd1dcfc27deed327b9f9630d2fa969fb6f0603cd19dd9a9519e673bcfcd9014125291a44669ef7285e74ed3729b677f801c3cdf058c50963168b496043716c730
|
|
||||||
|
|
||||||
Cipher = chacha20
|
|
||||||
Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
|
|
||||||
IV = 00000000000000000001020304050607
|
|
||||||
Plaintext = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
||||||
Ciphertext = f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f15916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c507b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb3ab78fab78c94213668bbbd394c5de93b853178addd6b97f9fa1ec3e56c00c9ddff0a44a204241175a4cab0f961ba53ede9bdf960b94f9829b1f3414726429b362c5b538e391520f489b7ed8d20ae3fd49e9e259e44397514d618c96c4846be3c680bdc11c71dcbbe29ccf80d62a0938fa549391e6ea57ecbe2606790ec15d2224ae307c144226b7c4e8c2f97d2a1d67852d29beba110edd445197012062a393a9c92803ad3b4f31d7bc6033ccf7932cfed3f019044d25905916777286f82f9a4cc1ffe430ffd1dcfc27deed327b9f9630d2fa969fb6f0603cd19dd9a9519e673bcfcd9014125291a44669ef7285e74ed3729b677f801c3cdf058c50963168b496043716c7307cd9e0cdd137fccb0f05b47cdbb95c5f54831622c3652a32b2531fe326bcd6e2bbf56a194fa196fbd1a54952110f51c73433865f7664b836685e3664b3d8444aF89A242805E18C975F1146324996FDE17007CF3E6E8F4E764022533EDBFE07D4733E48BB372D75B0EF48EC983EB78532161CC529E5ABB89837DFCCA6261DBB37
|
|
||||||
|
|
||||||
Cipher = chacha20
|
|
||||||
Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
|
|
||||||
IV = 00000000000000000001020304050607
|
|
||||||
Plaintext = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
||||||
Ciphertext = f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f15916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c507b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb3ab78fab78c94213668bbbd394c5de93b853178addd6b97f9fa1ec3e56c00c9ddff0a44a204241175a4cab0f961ba53ede9bdf960b94f9829b1f3414726429b362c5b538e391520f489b7ed8d20ae3fd49e9e259e44397514d618c96c4846be3c680bdc11c71dcbbe29ccf80d62a0938fa549391e6ea57ecbe2606790ec15d2224ae307c144226b7c4e8c2f97d2a1d67852d29beba110edd445197012062a393a9c92803ad3b4f31d7bc6033ccf7932cfed3f019044d25905916777286f82f9a4cc1ffe430ffd1dcfc27deed327b9f9630d2fa969fb6f0603cd19dd9a9519e673bcfcd9014125291a44669ef7285e74ed3729b677f801c3cdf058c50963168b496043716c7307cd9e0cdd137fccb0f05b47cdbb95c5f54831622c3652a32b2531fe326bcd6e2bbf56a194fa196fbd1a54952110f51c73433865f7664b836685e3664b3d8444a
|
|
||||||
|
|
||||||
Cipher = chacha20
|
|
||||||
Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
|
|
||||||
IV = 00000000000000000001020304050607
|
|
||||||
Plaintext = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
||||||
Ciphertext = f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f15916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c507b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb3ab78fab78c94213668bbbd394c5de93b853178addd6b97f9fa1ec3e56c00c9ddff0a44a204241175a4cab0f961ba53ede9bdf960b94f9829b1f3414726429b362c5b538e391520f489b7ed8d20ae3fd49e9e259e44397514d618c96c4846be3c680bdc11c71dcbbe29ccf80d62a0938fa549391e6ea57ecbe2606790ec15d2224ae307c144226b7c4e8c2f97d2a1d67852d29beba110edd445197012062a393a9c92803ad3b4f31d7bc6033ccf7932cfed3f019044d25905916777286f82f9a4cc1ffe430ffd1dcfc27deed327b9f9630d2fa969fb6f0603cd19dd9a9519e673bcfcd9014125291a44669ef7285e74ed3729b677f801c3cdf058c50963168b496043716c7307cd9e0cdd137fccb0f05b47cdbb95c5f54831622c3652a32b2531fe326bcd6e2bbf56a194fa196fbd1a54952110f51c73433865f7664b836685e3664b3d8444aF89A242805E18C975F1146324996FDE17007CF3E6E8F4E764022533EDBFE07D4733E48BB372D75B0EF48EC983EB78532161CC529E5ABB89837DFCCA6261DBB37C7C5E6A87478BF41EE85A518C0F4EFA9BDE828C5A71B8E46597B634AFD204D3C501334239C3414285ED72D3A9169EABBD4DC25D52BB7516D3BA712D75AD8C0AE
|
|
||||||
|
|
||||||
Cipher = chacha20
|
|
||||||
Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
|
|
||||||
IV = 00000000000000000001020304050607
|
|
||||||
Plaintext = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
||||||
Ciphertext = f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f15916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c507b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb3ab78fab78c94213668bbbd394c5de93b853178addd6b97f9fa1ec3e56c00c9ddff0a44a204241175a4cab0f961ba53ede9bdf960b94f9829b1f3414726429b362c5b538e391520f489b7ed8d20ae3fd49e9e259e44397514d618c96c4846be3c680bdc11c71dcbbe29ccf80d62a0938fa549391e6ea57ecbe2606790ec15d2224ae307c144226b7c4e8c2f97d2a1d67852d29beba110edd445197012062a393a9c92803ad3b4f31d7bc6033ccf7932cfed3f019044d25905916777286f82f9a4cc1ffe430ffd1dcfc27deed327b9f9630d2fa969fb6f0603cd19dd9a9519e673bcfcd9014125291a44669ef7285e74ed3729b677f801c3cdf058c50963168b496043716c7307cd9e0cdd137fccb0f05b47cdbb95c5f54831622c3652a32b2531fe326bcd6e2bbf56a194fa196fbd1a54952110f51c73433865f7664b836685e3664b3d8444aF89A242805E18C975F1146324996FDE17007CF3E6E8F4E764022533EDBFE07D4733E48BB372D75B0EF48EC983EB78532161CC529E5ABB89837DFCCA6261DBB37C7C5E6A87478BF41EE85A518C0F4EFA9BDE828C5A71B8E46597B634AFD204D3C501334239C3414285ED72D3A9169EABBD4DC25D52BB7516D3BA712D75AD8C0AE5D493C19E38A77939E7A058D713E9CCCCA58045F436B434B1C80D365472406E392951987DB6905C80D431DA18451135BE7E82BCAB358CB3971E61405B2FF1798
|
|
||||||
|
|
||||||
Cipher = chacha20
|
|
||||||
Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
|
|
||||||
IV = 00000000000000000001020304050607
|
|
||||||
Plaintext = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
||||||
Ciphertext = f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f15916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c507b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb3ab78fab78c94213668bbbd394c5de93b853178addd6b97f9fa1ec3e56c00c9ddff0a44a204241175a4cab0f961ba53ede9bdf960b94f9829b1f3414726429b362c5b538e391520f489b7ed8d20ae3fd49e9e259e44397514d618c96c4846be3c680bdc11c71dcbbe29ccf80d62a0938fa549391e6ea57ecbe2606790ec15d2224ae307c144226b7c4e8c2f97d2a1d67852d29beba110edd445197012062a393a9c92803ad3b4f31d7bc6033ccf7932cfed3f019044d25905916777286f82f9a4cc1ffe430ffd1dcfc27deed327b9f9630d2fa969fb6f0603cd19dd9a9519e673bcfcd9014125291a44669ef7285e74ed3729b677f801c3cdf058c50963168b496043716c7307cd9e0cdd137fccb0f05b47cdbb95c5f54831622c3652a32b2531fe326bcd6e2bbf56a194fa196fbd1a54952110f51c73433865f7664b836685e3664b3d8444aF89A242805E18C975F1146324996FDE17007CF3E6E8F4E764022533EDBFE07D4733E48BB372D75B0EF48EC983EB78532161CC529E5ABB89837DFCCA6261DBB37C7C5E6A87478BF41EE85A518C0F4EFA9BDE828C5A71B8E46597B634AFD204D3C501334239C3414285ED72D3A9169EABBD4DC25D52BB7516D3BA712D75AD8C0AE5D493C19E38A77939E7A058D713E9CCCCA58045F436B434B1C80D365472406E392951987DB6905C80D431DA18451135BE7E82BCAB358CB3971E61405B2FF17980D6E7E67E861E28201C1EE30B441040FD06878D65042C95582A4318207BFC700BE0CE32889AEC2FFE5085E8967910D879FA0E8C0FF85FDC510B9FF2FBF87CFCB
|
|
||||||
|
|
||||||
Cipher = chacha20
|
|
||||||
Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
|
|
||||||
IV = 00000000000000000001020304050607
|
|
||||||
Plaintext = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
||||||
Ciphertext = f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f15916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c507b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb3ab78fab78c94213668bbbd394c5de93b853178addd6b97f9fa1ec3e56c00c9ddff0a44a204241175a4cab0f961ba53ede9bdf960b94f9829b1f3414726429b362c5b538e391520f489b7ed8d20ae3fd49e9e259e44397514d618c96c4846be3c680bdc11c71dcbbe29ccf80d62a0938fa549391e6ea57ecbe2606790ec15d2224ae307c144226b7c4e8c2f97d2a1d67852d29beba110edd445197012062a393a9c92803ad3b4f31d7bc6033ccf7932cfed3f019044d25905916777286f82f9a4cc1ffe430ffd1dcfc27deed327b9f9630d2fa969fb6f0603cd19dd9a9519e673bcfcd9014125291a44669ef7285e74ed3729b677f801c3cdf058c50963168b496043716c7307cd9e0cdd137fccb0f05b47cdbb95c5f54831622c3652a32b2531fe326bcd6e2bbf56a194fa196fbd1a54952110f51c73433865f7664b836685e3664b3d8444aF89A242805E18C975F1146324996FDE17007CF3E6E8F4E764022533EDBFE07D4733E48BB372D75B0EF48EC983EB78532161CC529E5ABB89837DFCCA6261DBB37C7C5E6A87478BF41EE85A518C0F4EFA9BDE828C5A71B8E46597B634AFD204D3C501334239C3414285ED72D3A9169EABBD4DC25D52BB7516D3BA712D75AD8C0AE5D493C19E38A77939E7A058D713E9CCCCA58045F436B434B1C80D365472406E392951987DB6905C80D431DA18451135BE7E82BCAB358CB3971E61405B2FF17980D6E7E67E861E28201C1EE30B441040FD06878D65042C95582A4318207BFC700BE0CE32889AEC2FFE5085E8967910D879FA0E8C0FF85FDC510B9FF2FBF87CFCB29577D68099E04FFA05F752A73D377C70D3A8BC2DA80E6E780EC057182C33AD1DE387252258A1E18E6FAD910327CE7F42FD1E1E0515F9586E2F2EFCB9F472B1D
|
|
||||||
|
|
||||||
Cipher = chacha20
|
|
||||||
Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
|
|
||||||
IV = 00000000000000000001020304050607
|
|
||||||
Plaintext = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
||||||
Ciphertext = f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f15916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c507b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb3ab78fab78c94213668bbbd394c5de93b853178addd6b97f9fa1ec3e56c00c9ddff0a44a204241175a4cab0f961ba53ede9bdf960b94f9829b1f3414726429b362c5b538e391520f489b7ed8d20ae3fd49e9e259e44397514d618c96c4846be3c680bdc11c71dcbbe29ccf80d62a0938fa549391e6ea57ecbe2606790ec15d2224ae307c144226b7c4e8c2f97d2a1d67852d29beba110edd445197012062a393a9c92803ad3b4f31d7bc6033ccf7932cfed3f019044d25905916777286f82f9a4cc1ffe430ffd1dcfc27deed327b9f9630d2fa969fb6f0603cd19dd9a9519e673bcfcd9014125291a44669ef7285e74ed3729b677f801c3cdf058c50963168b496043716c7307cd9e0cdd137fccb0f05b47cdbb95c5f54831622c3652a32b2531fe326bcd6e2bbf56a194fa196fbd1a54952110f51c73433865f7664b836685e3664b3d8444aF89A242805E18C975F1146324996FDE17007CF3E6E8F4E764022533EDBFE07D4733E48BB372D75B0EF48EC983EB78532161CC529E5ABB89837DFCCA6261DBB37C7C5E6A87478BF41EE85A518C0F4EFA9BDE828C5A71B8E46597B634AFD204D3C501334239C3414285ED72D3A9169EABBD4DC25D52BB7516D3BA712D75AD8C0AE5D493C19E38A77939E7A058D713E9CCCCA58045F436B434B1C80D365472406E392951987DB6905C80D431DA18451135BE7E82BCAB358CB3971E61405B2FF17980D6E7E67E861E28201C1EE30B441040FD06878D65042C95582A4318207BFC700BE0CE32889AEC2FFE5085E8967910D879FA0E8C0FF85FDC510B9FF2FBF87CFCB29577D68099E04FFA05F752A73D377C70D3A8BC2DA80E6E780EC057182C33AD1DE387252258A1E18E6FAD910327CE7F42FD1E1E0515F9586E2F2EFCB9F472B1DBDBAC354A4162151E9D92C79FB08BB4DDC56F19448C0175A46E2E6C491FEC71419AA43A349BEA768A92C75DE68FD9591E68067F3197094D3FB87ED81785EA075
|
|
||||||
|
|
||||||
Cipher = chacha20
|
|
||||||
Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
|
|
||||||
IV = 00000000000000000001020304050607
|
|
||||||
Plaintext = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
||||||
Ciphertext = f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f15916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c507b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb3ab78fab78c94213668bbbd394c5de93b853178addd6b97f9fa1ec3e56c00c9ddff0a44a204241175a4cab0f961ba53ede9bdf960b94f9829b1f3414726429b362c5b538e391520f489b7ed8d20ae3fd49e9e259e44397514d618c96c4846be3c680bdc11c71dcbbe29ccf80d62a0938fa549391e6ea57ecbe2606790ec15d2224ae307c144226b7c4e8c2f97d2a1d67852d29beba110edd445197012062a393a9c92803ad3b4f31d7bc6033ccf7932cfed3f019044d25905916777286f82f9a4cc1ffe430ffd1dcfc27deed327b9f9630d2fa969fb6f0603cd19dd9a9519e673bcfcd9014125291a44669ef7285e74ed3729b677f801c3cdf058c50963168b496043716c7307cd9e0cdd137fccb0f05b47cdbb95c5f54831622c3652a32b2531fe326bcd6e2bbf56a194fa196fbd1a54952110f51c73433865f7664b836685e3664b3d8444aF89A242805E18C975F1146324996FDE17007CF3E6E8F4E764022533EDBFE07D4733E48BB372D75B0EF48EC983EB78532161CC529E5ABB89837DFCCA6261DBB37C7C5E6A87478BF41EE85A518C0F4EFA9BDE828C5A71B8E46597B634AFD204D3C501334239C3414285ED72D3A9169EABBD4DC25D52BB7516D3BA712D75AD8C0AE5D493C19E38A77939E7A058D713E9CCCCA58045F436B434B1C80D365472406E392951987DB6905C80D431DA18451135BE7E82BCAB358CB3971E61405B2FF17980D6E7E67E861E28201C1EE30B441040FD06878D65042C95582A4318207BFC700BE0CE32889AEC2FFE5085E8967910D879FA0E8C0FF85FDC510B9FF2FBF87CFCB29577D68099E04FFA05F752A73D377C70D3A8BC2DA80E6E780EC057182C33AD1DE387252258A1E18E6FAD910327CE7F42FD1E1E0515F9586E2F2EFCB9F472B1DBDBAC354A4162151E9D92C79FB08BB4DDC56F19448C0175A46E2E6C491FEC71419AA43A349BEA768A92C75DE68FD9591E68067F3197094D3FB87ED81785EA075E4B65E3E4C78F81DA9B751C5EFE024152301C48E63245B556C4C67AFF857E5EA15A908D83A1D9704F8E55E7352B20B694BF9970298E6B5AAD33EA2155D105D4E
|
|
||||||
|
|
||||||
Cipher = chacha20
|
|
||||||
Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
|
|
||||||
IV = 00000000000000000001020304050607
|
|
||||||
Plaintext = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
||||||
Ciphertext = f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f15916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c507b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb3ab78fab78c94213668bbbd394c5de93b853178addd6b97f9fa1ec3e56c00c9ddff0a44a204241175a4cab0f961ba53ede9bdf960b94f9829b1f3414726429b362c5b538e391520f489b7ed8d20ae3fd49e9e259e44397514d618c96c4846be3c680bdc11c71dcbbe29ccf80d62a0938fa549391e6ea57ecbe2606790ec15d2224ae307c144226b7c4e8c2f97d2a1d67852d29beba110edd445197012062a393a9c92803ad3b4f31d7bc6033ccf7932cfed3f019044d25905916777286f82f9a4cc1ffe430ffd1dcfc27deed327b9f9630d2fa969fb6f0603cd19dd9a9519e673bcfcd9014125291a44669ef7285e74ed3729b677f801c3cdf058c50963168b496043716c7307cd9e0cdd137fccb0f05b47cdbb95c5f54831622c3652a32b2531fe326bcd6e2bbf56a194fa196fbd1a54952110f51c73433865f7664b836685e3664b3d8444aF89A242805E18C975F1146324996FDE17007CF3E6E8F4E764022533EDBFE07D4733E48BB372D75B0EF48EC983EB78532161CC529E5ABB89837DFCCA6261DBB37C7C5E6A87478BF41EE85A518C0F4EFA9BDE828C5A71B8E46597B634AFD204D3C501334239C3414285ED72D3A9169EABBD4DC25D52BB7516D3BA712D75AD8C0AE5D493C19E38A77939E7A058D713E9CCCCA58045F436B434B1C80D365472406E392951987DB6905C80D431DA18451135BE7E82BCAB358CB3971E61405B2FF17980D6E7E67E861E28201C1EE30B441040FD06878D65042C95582A4318207BFC700BE0CE32889AEC2FFE5085E8967910D879FA0E8C0FF85FDC510B9FF2FBF87CFCB29577D68099E04FFA05F752A73D377C70D3A8BC2DA80E6E780EC057182C33AD1DE387252258A1E18E6FAD910327CE7F42FD1E1E0515F9586E2F2EFCB9F472B1DBDBAC354A4162151E9D92C79FB08BB4DDC56F19448C0175A46E2E6C491FEC71419AA43A349BEA768A92C75DE68FD9591E68067F3197094D3FB87ED81785EA075E4B65E3E4C78F81DA9B751C5EFE024152301C48E63245B556C4C67AFF857E5EA15A908D83A1D9704F8E55E7352B20B694BF9970298E6B5AAD33EA2155D105D4E637D1E87C40A8E5F4E8C5A16A4B8F3DC27B31721D77A65FD1ED6F86BE25FB95DB29B1988493770A7C60E451FF97DD241A236851FC425691979FE30226559AD95
|
|
||||||
|
|
||||||
# RFC7539
|
|
||||||
Cipher = chacha20-poly1305
|
|
||||||
Key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
|
|
||||||
IV = 070000004041424344454647
|
|
||||||
AAD = 50515253c0c1c2c3c4c5c6c7
|
|
||||||
Tag = 1ae10b594f09e26a7e902ecbd0600691
|
|
||||||
Plaintext = 4c616469657320616e642047656e746c656d656e206f662074686520636c617373206f66202739393a204966204920636f756c64206f6666657220796f75206f6e6c79206f6e652074697020666f7220746865206675747572652c2073756e73637265656e20776f756c642062652069742e
|
|
||||||
Ciphertext = d31a8d34648e60db7b86afbc53ef7ec2a4aded51296e08fea9e2b5a736ee62d63dbea45e8ca9671282fafb69da92728b1a71de0a9e060b2905d6a5b67ecd3b3692ddbd7f2d778b8c9803aee328091b58fab324e4fad675945585808b4831d7bc3ff4def08e4b7a9de576d26586cec64b6116
|
|
||||||
|
|
||||||
Cipher = chacha20-poly1305
|
|
||||||
Key = 1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0
|
|
||||||
IV = 000000000102030405060708
|
|
||||||
AAD = f33388860000000000004e91
|
|
||||||
Tag = eead9d67890cbb22392336fea1851f38
|
|
||||||
Plaintext = 496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d447261667473206173207265666572656e6365206d6174657269616c206f7220746f2063697465207468656d206f74686572207468616e206173202fe2809c776f726b20696e2070726f67726573732e2fe2809d
|
|
||||||
Ciphertext = 64a0861575861af460f062c79be643bd5e805cfd345cf389f108670ac76c8cb24c6cfc18755d43eea09ee94e382d26b0bdb7b73c321b0100d4f03b7f355894cf332f830e710b97ce98c8a84abd0b948114ad176e008d33bd60f982b1ff37c8559797a06ef4f0ef61c186324e2b3506383606907b6a7c02b0f9f6157b53c867e4b9166c767b804d46a59b5216cde7a4e99040c5a40433225ee282a1b0a06c523eaf4534d7f83fa1155b0047718cbc546a0d072b04b3564eea1b422273f548271a0bb2316053fa76991955ebd63159434ecebb4e466dae5a1073a6727627097a1049e617d91d361094fa68f0ff77987130305beaba2eda04df997b714d6c6f2c29a6ad5cb4022b02709b
|
|
||||||
|
|
||||||
Cipher = chacha20-poly1305
|
|
||||||
Key = 1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0
|
|
||||||
IV = 000000000102030405060708
|
|
||||||
AAD = f33388860000000000004e91
|
|
||||||
Tag = eead9d67890cbb22392336fea1851f39
|
|
||||||
Plaintext = 496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d447261667473206173207265666572656e6365206d6174657269616c206f7220746f2063697465207468656d206f74686572207468616e206173202fe2809c776f726b20696e2070726f67726573732e2fe2809d
|
|
||||||
Ciphertext = 64a0861575861af460f062c79be643bd5e805cfd345cf389f108670ac76c8cb24c6cfc18755d43eea09ee94e382d26b0bdb7b73c321b0100d4f03b7f355894cf332f830e710b97ce98c8a84abd0b948114ad176e008d33bd60f982b1ff37c8559797a06ef4f0ef61c186324e2b3506383606907b6a7c02b0f9f6157b53c867e4b9166c767b804d46a59b5216cde7a4e99040c5a40433225ee282a1b0a06c523eaf4534d7f83fa1155b0047718cbc546a0d072b04b3564eea1b422273f548271a0bb2316053fa76991955ebd63159434ecebb4e466dae5a1073a6727627097a1049e617d91d361094fa68f0ff77987130305beaba2eda04df997b714d6c6f2c29a6ad5cb4022b02709b
|
|
||||||
Operation = DECRYPT
|
|
||||||
Result = CIPHERFINAL_ERROR
|
|
||||||
|
|
||||||
# self-generated vectors
|
|
||||||
Cipher = chacha20-poly1305
|
|
||||||
Key = 1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0
|
|
||||||
IV = 000000000102030405060708
|
|
||||||
AAD = f33388860000000000004e91
|
|
||||||
Tag = d96119a40cd17f2527306866a3ef0413
|
|
||||||
Plaintext = 496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d4472616674732061732072
|
|
||||||
Ciphertext = 64a0861575861af460f062c79be643bd5e805cfd345cf389f108670ac76c8cb24c6cfc18755d43eea09ee94e382d26b0bdb7b73c321b0100d4f03b7f355894cf332f830e710b97ce98c8a84abd0b948114ad176e008d33bd60f982b1ff37c8559797a06ef4f0ef61c186324e2b3506383606907b6a7c02b0f9f6157b53c867e4b9166c767b804d46a59b5216cde7a4e99040c5a40433225ee282a1b0a06c523eaf4534d7f83fa1155b0047718cbc546a0d072b04b3564eea1b422273f548271a
|
|
||||||
|
|
||||||
Cipher = chacha20-poly1305
|
|
||||||
Key = 1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0
|
|
||||||
IV = 000000000102030405060708
|
|
||||||
AAD = f33388860000000000004e91
|
|
||||||
Tag = 53aee3189d2b747032378a6186feb43f
|
|
||||||
Plaintext = 496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d447261667473206173207265666572656e6365206d6174657269616c206f7220746f2063697465207468656d206f74686572207468616e206173202fe2809c776f726b20696e2070726f67496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d447261667473206173207265666572656e6365206d6174657269616c206f7220746f2063697465207468656d206f74686572207468616e206173202fe2809c776f726b20696e2070726f67
|
|
||||||
Ciphertext = 64a0861575861af460f062c79be643bd5e805cfd345cf389f108670ac76c8cb24c6cfc18755d43eea09ee94e382d26b0bdb7b73c321b0100d4f03b7f355894cf332f830e710b97ce98c8a84abd0b948114ad176e008d33bd60f982b1ff37c8559797a06ef4f0ef61c186324e2b3506383606907b6a7c02b0f9f6157b53c867e4b9166c767b804d46a59b5216cde7a4e99040c5a40433225ee282a1b0a06c523eaf4534d7f83fa1155b0047718cbc546a0d072b04b3564eea1b422273f548271a0bb2316053fa76991955ebd63159434ecebb4e466dae5a1073a6727627097a1049e617d91d361094fa68f0ff77987130305beaba2eda04df997b714d6c6f2c299da65ba25e6a85842bf0440fd98a9a2266b061c4b3a13327c090f9a0789f58aad805275e4378a525f19232bfbfb749ede38480f405cf43ec2f1f8619ebcbc80a89e92a859c7911e674977ab17d4a7126a6b8a477358ff14a344d276ef6e504e10268ac3619fcf90c2d6c03fc2e3d1f290d9bf26c1fa1495dd8f97eec6229a55c2354e4524143551a5cc370a1c622c9390530cff21c3e1ed50c5e3daf97518ccce34156bdbd7eafab8bd417aef25c6c927301731bd319d247a1d5c3186ed10bfd9a7a24bac30e3e4503ed9204154d338b79ea276e7058e7f20f4d4fd1ac93d63f611af7b6d006c2a72add0eedc497b19cb30a198816664f0da00155f2e2d6ac61
|
|
||||||
|
|
||||||
Cipher = chacha20-poly1305
|
|
||||||
Key = 1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0
|
|
||||||
IV = 000000000102030405060708
|
|
||||||
AAD = f33388860000000000004e91
|
|
||||||
Tag = e0723bce23528ce6ccb10ff9627038bf
|
|
||||||
Plaintext = 496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d447261667473206173207265666572656e6365206d6174657269616c206f7220746f2063697465207468656d206f74686572207468616e206173202fe2809c776f726b20696e2070726f67496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d447261667473206173207265666572656e6365206d6174657269616c206f7220746f2063697465207468656d206f74686572207468616e206173202fe2809c776f726b20696e2070726f67496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d
|
|
||||||
Ciphertext = 64a0861575861af460f062c79be643bd5e805cfd345cf389f108670ac76c8cb24c6cfc18755d43eea09ee94e382d26b0bdb7b73c321b0100d4f03b7f355894cf332f830e710b97ce98c8a84abd0b948114ad176e008d33bd60f982b1ff37c8559797a06ef4f0ef61c186324e2b3506383606907b6a7c02b0f9f6157b53c867e4b9166c767b804d46a59b5216cde7a4e99040c5a40433225ee282a1b0a06c523eaf4534d7f83fa1155b0047718cbc546a0d072b04b3564eea1b422273f548271a0bb2316053fa76991955ebd63159434ecebb4e466dae5a1073a6727627097a1049e617d91d361094fa68f0ff77987130305beaba2eda04df997b714d6c6f2c299da65ba25e6a85842bf0440fd98a9a2266b061c4b3a13327c090f9a0789f58aad805275e4378a525f19232bfbfb749ede38480f405cf43ec2f1f8619ebcbc80a89e92a859c7911e674977ab17d4a7126a6b8a477358ff14a344d276ef6e504e10268ac3619fcf90c2d6c03fc2e3d1f290d9bf26c1fa1495dd8f97eec6229a55c2354e4524143551a5cc370a1c622c9390530cff21c3e1ed50c5e3daf97518ccce34156bdbd7eafab8bd417aef25c6c927301731bd319d247a1d5c3186ed10bfd9a7a24bac30e3e4503ed9204154d338b79ea276e7058e7f20f4d4fd1ac93d63f611af7b6d006c2a72add0eedc497b19cb30a198816664f0da00155f2e2d6ac61045b296d614301e0ad4983308028850dd4feffe3a8163970306e4047f5a165cb4befbc129729cd2e286e837e9b606486d402acc3dec5bf8b92387f6e486f2140
|
|
||||||
|
|
||||||
Cipher = chacha20-poly1305
|
|
||||||
Key = 1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0
|
|
||||||
IV = ff000000000102030405060708
|
|
||||||
AAD = f33388860000000000004e91
|
|
||||||
Tag = e0723bce23528ce6ccb10ff9627038bf
|
|
||||||
Plaintext = 496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d447261667473206173207265666572656e6365206d6174657269616c206f7220746f2063697465207468656d206f74686572207468616e206173202fe2809c776f726b20696e2070726f67496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d447261667473206173207265666572656e6365206d6174657269616c206f7220746f2063697465207468656d206f74686572207468616e206173202fe2809c776f726b20696e2070726f67496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d
|
|
||||||
Ciphertext = 64a0861575861af460f062c79be643bd5e805cfd345cf389f108670ac76c8cb24c6cfc18755d43eea09ee94e382d26b0bdb7b73c321b0100d4f03b7f355894cf332f830e710b97ce98c8a84abd0b948114ad176e008d33bd60f982b1ff37c8559797a06ef4f0ef61c186324e2b3506383606907b6a7c02b0f9f6157b53c867e4b9166c767b804d46a59b5216cde7a4e99040c5a40433225ee282a1b0a06c523eaf4534d7f83fa1155b0047718cbc546a0d072b04b3564eea1b422273f548271a0bb2316053fa76991955ebd63159434ecebb4e466dae5a1073a6727627097a1049e617d91d361094fa68f0ff77987130305beaba2eda04df997b714d6c6f2c299da65ba25e6a85842bf0440fd98a9a2266b061c4b3a13327c090f9a0789f58aad805275e4378a525f19232bfbfb749ede38480f405cf43ec2f1f8619ebcbc80a89e92a859c7911e674977ab17d4a7126a6b8a477358ff14a344d276ef6e504e10268ac3619fcf90c2d6c03fc2e3d1f290d9bf26c1fa1495dd8f97eec6229a55c2354e4524143551a5cc370a1c622c9390530cff21c3e1ed50c5e3daf97518ccce34156bdbd7eafab8bd417aef25c6c927301731bd319d247a1d5c3186ed10bfd9a7a24bac30e3e4503ed9204154d338b79ea276e7058e7f20f4d4fd1ac93d63f611af7b6d006c2a72add0eedc497b19cb30a198816664f0da00155f2e2d6ac61045b296d614301e0ad4983308028850dd4feffe3a8163970306e4047f5a165cb4befbc129729cd2e286e837e9b606486d402acc3dec5bf8b92387f6e486f2140
|
|
||||||
Result = INVALID_IV_LENGTH
|
|
||||||
|
199
test/recipes/30-test_evp_data/evpciph_chacha.txt
Normal file
199
test/recipes/30-test_evp_data/evpciph_chacha.txt
Normal file
@ -0,0 +1,199 @@
|
|||||||
|
#
|
||||||
|
# Copyright 2001-2019 The OpenSSL Project Authors. All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||||
|
# this file except in compliance with the License. You can obtain a copy
|
||||||
|
# in the file LICENSE in the source distribution or at
|
||||||
|
# https://www.openssl.org/source/license.html
|
||||||
|
|
||||||
|
# Tests start with one of these keywords
|
||||||
|
# Cipher Decrypt Derive Digest Encoding KDF MAC PBE
|
||||||
|
# PrivPubKeyPair Sign Verify VerifyRecover
|
||||||
|
# and continue until a blank line. Lines starting with a pound sign,
|
||||||
|
# like this prolog, are ignored.
|
||||||
|
|
||||||
|
Title = Chacha20 test vectors from RFC7539
|
||||||
|
|
||||||
|
# A.1 Test Vector 1
|
||||||
|
Cipher = chacha20
|
||||||
|
Key = 0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
IV = 00000000000000000000000000000000
|
||||||
|
Plaintext = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
Ciphertext = 76b8e0ada0f13d90405d6ae55386bd28bdd219b8a08ded1aa836efcc8b770dc7da41597c5157488d7724e03fb8d84a376a43b8f41518a11cc387b669b2ee6586
|
||||||
|
|
||||||
|
# A.1 Test Vector 2
|
||||||
|
Cipher = chacha20
|
||||||
|
Key = 0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
IV = 01000000000000000000000000000000
|
||||||
|
Plaintext = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
Ciphertext = 9f07e7be5551387a98ba977c732d080dcb0f29a048e3656912c6533e32ee7aed29b721769ce64e43d57133b074d839d531ed1f28510afb45ace10a1f4b794d6f
|
||||||
|
|
||||||
|
# A.2 Test Vector 1 is the same as A.1 Test Vector 1
|
||||||
|
# A.2 Test Vector 2
|
||||||
|
Cipher = chacha20
|
||||||
|
Key = 0000000000000000000000000000000000000000000000000000000000000001
|
||||||
|
#Counter (first 4 bytes) expressed in little-endian order
|
||||||
|
IV = 01000000000000000000000000000002
|
||||||
|
Plaintext = 416e79207375626d697373696f6e20746f20746865204945544620696e74656e6465642062792074686520436f6e7472696275746f7220666f72207075626c69636174696f6e20617320616c6c206f722070617274206f6620616e204945544620496e7465726e65742d4472616674206f722052464320616e6420616e792073746174656d656e74206d6164652077697468696e2074686520636f6e74657874206f6620616e204945544620616374697669747920697320636f6e7369646572656420616e20224945544620436f6e747269627574696f6e222e20537563682073746174656d656e747320696e636c756465206f72616c2073746174656d656e747320696e20494554462073657373696f6e732c2061732077656c6c206173207772697474656e20616e6420656c656374726f6e696320636f6d6d756e69636174696f6e73206d61646520617420616e792074696d65206f7220706c6163652c207768696368206172652061646472657373656420746f
|
||||||
|
Ciphertext = a3fbf07df3fa2fde4f376ca23e82737041605d9f4f4f57bd8cff2c1d4b7955ec2a97948bd3722915c8f3d337f7d370050e9e96d647b7c39f56e031ca5eb6250d4042e02785ececfa4b4bb5e8ead0440e20b6e8db09d881a7c6132f420e52795042bdfa7773d8a9051447b3291ce1411c680465552aa6c405b7764d5e87bea85ad00f8449ed8f72d0d662ab052691ca66424bc86d2df80ea41f43abf937d3259dc4b2d0dfb48a6c9139ddd7f76966e928e635553ba76c5c879d7b35d49eb2e62b0871cdac638939e25e8a1e0ef9d5280fa8ca328b351c3c765989cbcf3daa8b6ccc3aaf9f3979c92b3720fc88dc95ed84a1be059c6499b9fda236e7e818b04b0bc39c1e876b193bfe5569753f88128cc08aaa9b63d1a16f80ef2554d7189c411f5869ca52c5b83fa36ff216b9c1d30062bebcfd2dc5bce0911934fda79a86f6e698ced759c3ff9b6477338f3da4f9cd8514ea9982ccafb341b2384dd902f3d1ab7ac61dd29c6f21ba5b862f3730e37cfdc4fd806c22f221
|
||||||
|
|
||||||
|
# A.2 Test Vector 3
|
||||||
|
Cipher = chacha20
|
||||||
|
Key = 1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0
|
||||||
|
#Counter (first 4 bytes) expressed in little-endian order
|
||||||
|
IV = 2a000000000000000000000000000002
|
||||||
|
Plaintext = 2754776173206272696c6c69672c20616e642074686520736c6974687920746f7665730a446964206779726520616e642067696d626c6520696e2074686520776162653a0a416c6c206d696d737920776572652074686520626f726f676f7665732c0a416e6420746865206d6f6d65207261746873206f757467726162652e
|
||||||
|
Ciphertext = 62e6347f95ed87a45ffae7426f27a1df5fb69110044c0d73118effa95b01e5cf166d3df2d721caf9b21e5fb14c616871fd84c54f9d65b283196c7fe4f60553ebf39c6402c42234e32a356b3e764312a61a5532055716ead6962568f87d3f3f7704c6a8d1bcd1bf4d50d6154b6da731b187b58dfd728afa36757a797ac188d1
|
||||||
|
|
||||||
|
Title = Chacha20
|
||||||
|
|
||||||
|
Cipher = chacha20
|
||||||
|
Key = 0000000000000000000000000000000000000000000000000000000000000001
|
||||||
|
IV = 00000000000000000000000000000000
|
||||||
|
Plaintext = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
Ciphertext = 4540f05a9f1fb296d7736e7b208e3c96eb4fe1834688d2604f450952ed432d41bbe2a0b6ea7566d2a5d1e7e20d42af2c53d792b1c43fea817e9ad275ae546963
|
||||||
|
|
||||||
|
Cipher = chacha20
|
||||||
|
Key = 0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
IV = 00000000000000000000000000000001
|
||||||
|
Plaintext = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
Ciphertext = de9cba7bf3d69ef5e786dc63973f653a0b49e015adbff7134fcb7df137821031e85a050278a7084527214f73efc7fa5b5277062eb7a0433e445f41e31afab757
|
||||||
|
|
||||||
|
Cipher = chacha20
|
||||||
|
Key = 0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
IV = 00000000000000000100000000000000
|
||||||
|
Plaintext = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
Ciphertext = ef3fdfd6c61578fbf5cf35bd3dd33b8009631634d21e42ac33960bd138e50d32111e4caf237ee53ca8ad6426194a88545ddc497a0b466e7d6bbdb0041b2f586b
|
||||||
|
|
||||||
|
Cipher = chacha20
|
||||||
|
Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
|
||||||
|
IV = 00000000000000000001020304050607
|
||||||
|
Plaintext = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
Ciphertext = f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f15916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c507b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb
|
||||||
|
|
||||||
|
Cipher = chacha20
|
||||||
|
Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
|
||||||
|
IV = 00000000000000000001020304050607
|
||||||
|
Plaintext = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
Ciphertext = f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f15916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c507b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb3ab78fab78c9
|
||||||
|
|
||||||
|
Cipher = chacha20
|
||||||
|
Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
|
||||||
|
IV = 00000000000000000001020304050607
|
||||||
|
Plaintext = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
Ciphertext = f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f15916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c507b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb3ab78fab78c94213668bbbd394c5de93b853178addd6b97f9fa1ec3e56c00c9ddff0a44a204241175a4cab0f961ba53ede9bdf960b94f9829b1f3414726429b362c5b538e391520f489b7ed8d20ae3fd49e9e259e44397514d618c96c4846be3c680bdc11c71dcbbe29ccf80d62a0938fa549391e6ea57ecbe2606790ec15d2224ae307c144226b7c4e8c2f97d2a1d67852d29beba110edd445197012062a393a9c92803ad3b4f31d7bc6033ccf7932cfed3f019044d25905916777286f82f9a4cc1ffe430ffd1dcfc27deed327b9f9630d2fa969fb6f0603cd19dd9a9519e673bcfcd9014125291a44669ef7285e74ed3729b677f801c3cdf058c50963168b496043716c730
|
||||||
|
|
||||||
|
Cipher = chacha20
|
||||||
|
Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
|
||||||
|
IV = 00000000000000000001020304050607
|
||||||
|
Plaintext = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
Ciphertext = f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f15916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c507b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb3ab78fab78c94213668bbbd394c5de93b853178addd6b97f9fa1ec3e56c00c9ddff0a44a204241175a4cab0f961ba53ede9bdf960b94f9829b1f3414726429b362c5b538e391520f489b7ed8d20ae3fd49e9e259e44397514d618c96c4846be3c680bdc11c71dcbbe29ccf80d62a0938fa549391e6ea57ecbe2606790ec15d2224ae307c144226b7c4e8c2f97d2a1d67852d29beba110edd445197012062a393a9c92803ad3b4f31d7bc6033ccf7932cfed3f019044d25905916777286f82f9a4cc1ffe430ffd1dcfc27deed327b9f9630d2fa969fb6f0603cd19dd9a9519e673bcfcd9014125291a44669ef7285e74ed3729b677f801c3cdf058c50963168b496043716c7307cd9e0cdd137fccb0f05b47cdbb95c5f54831622c3652a32b2531fe326bcd6e2bbf56a194fa196fbd1a54952110f51c73433865f7664b836685e3664b3d8444aF89A242805E18C975F1146324996FDE17007CF3E6E8F4E764022533EDBFE07D4733E48BB372D75B0EF48EC983EB78532161CC529E5ABB89837DFCCA6261DBB37
|
||||||
|
|
||||||
|
Cipher = chacha20
|
||||||
|
Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
|
||||||
|
IV = 00000000000000000001020304050607
|
||||||
|
Plaintext = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
Ciphertext = f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f15916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c507b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb3ab78fab78c94213668bbbd394c5de93b853178addd6b97f9fa1ec3e56c00c9ddff0a44a204241175a4cab0f961ba53ede9bdf960b94f9829b1f3414726429b362c5b538e391520f489b7ed8d20ae3fd49e9e259e44397514d618c96c4846be3c680bdc11c71dcbbe29ccf80d62a0938fa549391e6ea57ecbe2606790ec15d2224ae307c144226b7c4e8c2f97d2a1d67852d29beba110edd445197012062a393a9c92803ad3b4f31d7bc6033ccf7932cfed3f019044d25905916777286f82f9a4cc1ffe430ffd1dcfc27deed327b9f9630d2fa969fb6f0603cd19dd9a9519e673bcfcd9014125291a44669ef7285e74ed3729b677f801c3cdf058c50963168b496043716c7307cd9e0cdd137fccb0f05b47cdbb95c5f54831622c3652a32b2531fe326bcd6e2bbf56a194fa196fbd1a54952110f51c73433865f7664b836685e3664b3d8444a
|
||||||
|
|
||||||
|
Cipher = chacha20
|
||||||
|
Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
|
||||||
|
IV = 00000000000000000001020304050607
|
||||||
|
Plaintext = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
Ciphertext = f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f15916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c507b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb3ab78fab78c94213668bbbd394c5de93b853178addd6b97f9fa1ec3e56c00c9ddff0a44a204241175a4cab0f961ba53ede9bdf960b94f9829b1f3414726429b362c5b538e391520f489b7ed8d20ae3fd49e9e259e44397514d618c96c4846be3c680bdc11c71dcbbe29ccf80d62a0938fa549391e6ea57ecbe2606790ec15d2224ae307c144226b7c4e8c2f97d2a1d67852d29beba110edd445197012062a393a9c92803ad3b4f31d7bc6033ccf7932cfed3f019044d25905916777286f82f9a4cc1ffe430ffd1dcfc27deed327b9f9630d2fa969fb6f0603cd19dd9a9519e673bcfcd9014125291a44669ef7285e74ed3729b677f801c3cdf058c50963168b496043716c7307cd9e0cdd137fccb0f05b47cdbb95c5f54831622c3652a32b2531fe326bcd6e2bbf56a194fa196fbd1a54952110f51c73433865f7664b836685e3664b3d8444aF89A242805E18C975F1146324996FDE17007CF3E6E8F4E764022533EDBFE07D4733E48BB372D75B0EF48EC983EB78532161CC529E5ABB89837DFCCA6261DBB37C7C5E6A87478BF41EE85A518C0F4EFA9BDE828C5A71B8E46597B634AFD204D3C501334239C3414285ED72D3A9169EABBD4DC25D52BB7516D3BA712D75AD8C0AE
|
||||||
|
|
||||||
|
Cipher = chacha20
|
||||||
|
Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
|
||||||
|
IV = 00000000000000000001020304050607
|
||||||
|
Plaintext = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
Ciphertext = f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f15916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c507b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb3ab78fab78c94213668bbbd394c5de93b853178addd6b97f9fa1ec3e56c00c9ddff0a44a204241175a4cab0f961ba53ede9bdf960b94f9829b1f3414726429b362c5b538e391520f489b7ed8d20ae3fd49e9e259e44397514d618c96c4846be3c680bdc11c71dcbbe29ccf80d62a0938fa549391e6ea57ecbe2606790ec15d2224ae307c144226b7c4e8c2f97d2a1d67852d29beba110edd445197012062a393a9c92803ad3b4f31d7bc6033ccf7932cfed3f019044d25905916777286f82f9a4cc1ffe430ffd1dcfc27deed327b9f9630d2fa969fb6f0603cd19dd9a9519e673bcfcd9014125291a44669ef7285e74ed3729b677f801c3cdf058c50963168b496043716c7307cd9e0cdd137fccb0f05b47cdbb95c5f54831622c3652a32b2531fe326bcd6e2bbf56a194fa196fbd1a54952110f51c73433865f7664b836685e3664b3d8444aF89A242805E18C975F1146324996FDE17007CF3E6E8F4E764022533EDBFE07D4733E48BB372D75B0EF48EC983EB78532161CC529E5ABB89837DFCCA6261DBB37C7C5E6A87478BF41EE85A518C0F4EFA9BDE828C5A71B8E46597B634AFD204D3C501334239C3414285ED72D3A9169EABBD4DC25D52BB7516D3BA712D75AD8C0AE5D493C19E38A77939E7A058D713E9CCCCA58045F436B434B1C80D365472406E392951987DB6905C80D431DA18451135BE7E82BCAB358CB3971E61405B2FF1798
|
||||||
|
|
||||||
|
Cipher = chacha20
|
||||||
|
Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
|
||||||
|
IV = 00000000000000000001020304050607
|
||||||
|
Plaintext = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
Ciphertext = f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f15916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c507b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb3ab78fab78c94213668bbbd394c5de93b853178addd6b97f9fa1ec3e56c00c9ddff0a44a204241175a4cab0f961ba53ede9bdf960b94f9829b1f3414726429b362c5b538e391520f489b7ed8d20ae3fd49e9e259e44397514d618c96c4846be3c680bdc11c71dcbbe29ccf80d62a0938fa549391e6ea57ecbe2606790ec15d2224ae307c144226b7c4e8c2f97d2a1d67852d29beba110edd445197012062a393a9c92803ad3b4f31d7bc6033ccf7932cfed3f019044d25905916777286f82f9a4cc1ffe430ffd1dcfc27deed327b9f9630d2fa969fb6f0603cd19dd9a9519e673bcfcd9014125291a44669ef7285e74ed3729b677f801c3cdf058c50963168b496043716c7307cd9e0cdd137fccb0f05b47cdbb95c5f54831622c3652a32b2531fe326bcd6e2bbf56a194fa196fbd1a54952110f51c73433865f7664b836685e3664b3d8444aF89A242805E18C975F1146324996FDE17007CF3E6E8F4E764022533EDBFE07D4733E48BB372D75B0EF48EC983EB78532161CC529E5ABB89837DFCCA6261DBB37C7C5E6A87478BF41EE85A518C0F4EFA9BDE828C5A71B8E46597B634AFD204D3C501334239C3414285ED72D3A9169EABBD4DC25D52BB7516D3BA712D75AD8C0AE5D493C19E38A77939E7A058D713E9CCCCA58045F436B434B1C80D365472406E392951987DB6905C80D431DA18451135BE7E82BCAB358CB3971E61405B2FF17980D6E7E67E861E28201C1EE30B441040FD06878D65042C95582A4318207BFC700BE0CE32889AEC2FFE5085E8967910D879FA0E8C0FF85FDC510B9FF2FBF87CFCB
|
||||||
|
|
||||||
|
Cipher = chacha20
|
||||||
|
Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
|
||||||
|
IV = 00000000000000000001020304050607
|
||||||
|
Plaintext = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
Ciphertext = f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f15916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c507b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb3ab78fab78c94213668bbbd394c5de93b853178addd6b97f9fa1ec3e56c00c9ddff0a44a204241175a4cab0f961ba53ede9bdf960b94f9829b1f3414726429b362c5b538e391520f489b7ed8d20ae3fd49e9e259e44397514d618c96c4846be3c680bdc11c71dcbbe29ccf80d62a0938fa549391e6ea57ecbe2606790ec15d2224ae307c144226b7c4e8c2f97d2a1d67852d29beba110edd445197012062a393a9c92803ad3b4f31d7bc6033ccf7932cfed3f019044d25905916777286f82f9a4cc1ffe430ffd1dcfc27deed327b9f9630d2fa969fb6f0603cd19dd9a9519e673bcfcd9014125291a44669ef7285e74ed3729b677f801c3cdf058c50963168b496043716c7307cd9e0cdd137fccb0f05b47cdbb95c5f54831622c3652a32b2531fe326bcd6e2bbf56a194fa196fbd1a54952110f51c73433865f7664b836685e3664b3d8444aF89A242805E18C975F1146324996FDE17007CF3E6E8F4E764022533EDBFE07D4733E48BB372D75B0EF48EC983EB78532161CC529E5ABB89837DFCCA6261DBB37C7C5E6A87478BF41EE85A518C0F4EFA9BDE828C5A71B8E46597B634AFD204D3C501334239C3414285ED72D3A9169EABBD4DC25D52BB7516D3BA712D75AD8C0AE5D493C19E38A77939E7A058D713E9CCCCA58045F436B434B1C80D365472406E392951987DB6905C80D431DA18451135BE7E82BCAB358CB3971E61405B2FF17980D6E7E67E861E28201C1EE30B441040FD06878D65042C95582A4318207BFC700BE0CE32889AEC2FFE5085E8967910D879FA0E8C0FF85FDC510B9FF2FBF87CFCB29577D68099E04FFA05F752A73D377C70D3A8BC2DA80E6E780EC057182C33AD1DE387252258A1E18E6FAD910327CE7F42FD1E1E0515F9586E2F2EFCB9F472B1D
|
||||||
|
|
||||||
|
Cipher = chacha20
|
||||||
|
Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
|
||||||
|
IV = 00000000000000000001020304050607
|
||||||
|
Plaintext = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
Ciphertext = f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f15916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c507b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb3ab78fab78c94213668bbbd394c5de93b853178addd6b97f9fa1ec3e56c00c9ddff0a44a204241175a4cab0f961ba53ede9bdf960b94f9829b1f3414726429b362c5b538e391520f489b7ed8d20ae3fd49e9e259e44397514d618c96c4846be3c680bdc11c71dcbbe29ccf80d62a0938fa549391e6ea57ecbe2606790ec15d2224ae307c144226b7c4e8c2f97d2a1d67852d29beba110edd445197012062a393a9c92803ad3b4f31d7bc6033ccf7932cfed3f019044d25905916777286f82f9a4cc1ffe430ffd1dcfc27deed327b9f9630d2fa969fb6f0603cd19dd9a9519e673bcfcd9014125291a44669ef7285e74ed3729b677f801c3cdf058c50963168b496043716c7307cd9e0cdd137fccb0f05b47cdbb95c5f54831622c3652a32b2531fe326bcd6e2bbf56a194fa196fbd1a54952110f51c73433865f7664b836685e3664b3d8444aF89A242805E18C975F1146324996FDE17007CF3E6E8F4E764022533EDBFE07D4733E48BB372D75B0EF48EC983EB78532161CC529E5ABB89837DFCCA6261DBB37C7C5E6A87478BF41EE85A518C0F4EFA9BDE828C5A71B8E46597B634AFD204D3C501334239C3414285ED72D3A9169EABBD4DC25D52BB7516D3BA712D75AD8C0AE5D493C19E38A77939E7A058D713E9CCCCA58045F436B434B1C80D365472406E392951987DB6905C80D431DA18451135BE7E82BCAB358CB3971E61405B2FF17980D6E7E67E861E28201C1EE30B441040FD06878D65042C95582A4318207BFC700BE0CE32889AEC2FFE5085E8967910D879FA0E8C0FF85FDC510B9FF2FBF87CFCB29577D68099E04FFA05F752A73D377C70D3A8BC2DA80E6E780EC057182C33AD1DE387252258A1E18E6FAD910327CE7F42FD1E1E0515F9586E2F2EFCB9F472B1DBDBAC354A4162151E9D92C79FB08BB4DDC56F19448C0175A46E2E6C491FEC71419AA43A349BEA768A92C75DE68FD9591E68067F3197094D3FB87ED81785EA075
|
||||||
|
|
||||||
|
Cipher = chacha20
|
||||||
|
Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
|
||||||
|
IV = 00000000000000000001020304050607
|
||||||
|
Plaintext = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
Ciphertext = f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f15916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c507b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb3ab78fab78c94213668bbbd394c5de93b853178addd6b97f9fa1ec3e56c00c9ddff0a44a204241175a4cab0f961ba53ede9bdf960b94f9829b1f3414726429b362c5b538e391520f489b7ed8d20ae3fd49e9e259e44397514d618c96c4846be3c680bdc11c71dcbbe29ccf80d62a0938fa549391e6ea57ecbe2606790ec15d2224ae307c144226b7c4e8c2f97d2a1d67852d29beba110edd445197012062a393a9c92803ad3b4f31d7bc6033ccf7932cfed3f019044d25905916777286f82f9a4cc1ffe430ffd1dcfc27deed327b9f9630d2fa969fb6f0603cd19dd9a9519e673bcfcd9014125291a44669ef7285e74ed3729b677f801c3cdf058c50963168b496043716c7307cd9e0cdd137fccb0f05b47cdbb95c5f54831622c3652a32b2531fe326bcd6e2bbf56a194fa196fbd1a54952110f51c73433865f7664b836685e3664b3d8444aF89A242805E18C975F1146324996FDE17007CF3E6E8F4E764022533EDBFE07D4733E48BB372D75B0EF48EC983EB78532161CC529E5ABB89837DFCCA6261DBB37C7C5E6A87478BF41EE85A518C0F4EFA9BDE828C5A71B8E46597B634AFD204D3C501334239C3414285ED72D3A9169EABBD4DC25D52BB7516D3BA712D75AD8C0AE5D493C19E38A77939E7A058D713E9CCCCA58045F436B434B1C80D365472406E392951987DB6905C80D431DA18451135BE7E82BCAB358CB3971E61405B2FF17980D6E7E67E861E28201C1EE30B441040FD06878D65042C95582A4318207BFC700BE0CE32889AEC2FFE5085E8967910D879FA0E8C0FF85FDC510B9FF2FBF87CFCB29577D68099E04FFA05F752A73D377C70D3A8BC2DA80E6E780EC057182C33AD1DE387252258A1E18E6FAD910327CE7F42FD1E1E0515F9586E2F2EFCB9F472B1DBDBAC354A4162151E9D92C79FB08BB4DDC56F19448C0175A46E2E6C491FEC71419AA43A349BEA768A92C75DE68FD9591E68067F3197094D3FB87ED81785EA075E4B65E3E4C78F81DA9B751C5EFE024152301C48E63245B556C4C67AFF857E5EA15A908D83A1D9704F8E55E7352B20B694BF9970298E6B5AAD33EA2155D105D4E
|
||||||
|
|
||||||
|
Cipher = chacha20
|
||||||
|
Key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
|
||||||
|
IV = 00000000000000000001020304050607
|
||||||
|
Plaintext = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
Ciphertext = f798a189f195e66982105ffb640bb7757f579da31602fc93ec01ac56f85ac3c134a4547b733b46413042c9440049176905d3be59ea1c53f15916155c2be8241a38008b9a26bc35941e2444177c8ade6689de95264986d95889fb60e84629c9bd9a5acb1cc118be563eb9b3a4a472f82e09a7e778492b562ef7130e88dfe031c79db9d4f7c7a899151b9a475032b63fc385245fe054e3dd5a97a5f576fe064025d3ce042c566ab2c507b138db853e3d6959660996546cc9c4a6eafdc777c040d70eaf46f76dad3979e5c5360c3317166a1c894c94a371876a94df7628fe4eaaf2ccb27d5aaae0ad7ad0f9d4b6ad3b54098746d4524d38407a6deb3ab78fab78c94213668bbbd394c5de93b853178addd6b97f9fa1ec3e56c00c9ddff0a44a204241175a4cab0f961ba53ede9bdf960b94f9829b1f3414726429b362c5b538e391520f489b7ed8d20ae3fd49e9e259e44397514d618c96c4846be3c680bdc11c71dcbbe29ccf80d62a0938fa549391e6ea57ecbe2606790ec15d2224ae307c144226b7c4e8c2f97d2a1d67852d29beba110edd445197012062a393a9c92803ad3b4f31d7bc6033ccf7932cfed3f019044d25905916777286f82f9a4cc1ffe430ffd1dcfc27deed327b9f9630d2fa969fb6f0603cd19dd9a9519e673bcfcd9014125291a44669ef7285e74ed3729b677f801c3cdf058c50963168b496043716c7307cd9e0cdd137fccb0f05b47cdbb95c5f54831622c3652a32b2531fe326bcd6e2bbf56a194fa196fbd1a54952110f51c73433865f7664b836685e3664b3d8444aF89A242805E18C975F1146324996FDE17007CF3E6E8F4E764022533EDBFE07D4733E48BB372D75B0EF48EC983EB78532161CC529E5ABB89837DFCCA6261DBB37C7C5E6A87478BF41EE85A518C0F4EFA9BDE828C5A71B8E46597B634AFD204D3C501334239C3414285ED72D3A9169EABBD4DC25D52BB7516D3BA712D75AD8C0AE5D493C19E38A77939E7A058D713E9CCCCA58045F436B434B1C80D365472406E392951987DB6905C80D431DA18451135BE7E82BCAB358CB3971E61405B2FF17980D6E7E67E861E28201C1EE30B441040FD06878D65042C95582A4318207BFC700BE0CE32889AEC2FFE5085E8967910D879FA0E8C0FF85FDC510B9FF2FBF87CFCB29577D68099E04FFA05F752A73D377C70D3A8BC2DA80E6E780EC057182C33AD1DE387252258A1E18E6FAD910327CE7F42FD1E1E0515F9586E2F2EFCB9F472B1DBDBAC354A4162151E9D92C79FB08BB4DDC56F19448C0175A46E2E6C491FEC71419AA43A349BEA768A92C75DE68FD9591E68067F3197094D3FB87ED81785EA075E4B65E3E4C78F81DA9B751C5EFE024152301C48E63245B556C4C67AFF857E5EA15A908D83A1D9704F8E55E7352B20B694BF9970298E6B5AAD33EA2155D105D4E637D1E87C40A8E5F4E8C5A16A4B8F3DC27B31721D77A65FD1ED6F86BE25FB95DB29B1988493770A7C60E451FF97DD241A236851FC425691979FE30226559AD95
|
||||||
|
|
||||||
|
# RFC7539
|
||||||
|
Cipher = chacha20-poly1305
|
||||||
|
Key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
|
||||||
|
IV = 070000004041424344454647
|
||||||
|
AAD = 50515253c0c1c2c3c4c5c6c7
|
||||||
|
Tag = 1ae10b594f09e26a7e902ecbd0600691
|
||||||
|
Plaintext = 4c616469657320616e642047656e746c656d656e206f662074686520636c617373206f66202739393a204966204920636f756c64206f6666657220796f75206f6e6c79206f6e652074697020666f7220746865206675747572652c2073756e73637265656e20776f756c642062652069742e
|
||||||
|
Ciphertext = d31a8d34648e60db7b86afbc53ef7ec2a4aded51296e08fea9e2b5a736ee62d63dbea45e8ca9671282fafb69da92728b1a71de0a9e060b2905d6a5b67ecd3b3692ddbd7f2d778b8c9803aee328091b58fab324e4fad675945585808b4831d7bc3ff4def08e4b7a9de576d26586cec64b6116
|
||||||
|
|
||||||
|
Cipher = chacha20-poly1305
|
||||||
|
Key = 1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0
|
||||||
|
IV = 000000000102030405060708
|
||||||
|
AAD = f33388860000000000004e91
|
||||||
|
Tag = eead9d67890cbb22392336fea1851f38
|
||||||
|
Plaintext = 496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d447261667473206173207265666572656e6365206d6174657269616c206f7220746f2063697465207468656d206f74686572207468616e206173202fe2809c776f726b20696e2070726f67726573732e2fe2809d
|
||||||
|
Ciphertext = 64a0861575861af460f062c79be643bd5e805cfd345cf389f108670ac76c8cb24c6cfc18755d43eea09ee94e382d26b0bdb7b73c321b0100d4f03b7f355894cf332f830e710b97ce98c8a84abd0b948114ad176e008d33bd60f982b1ff37c8559797a06ef4f0ef61c186324e2b3506383606907b6a7c02b0f9f6157b53c867e4b9166c767b804d46a59b5216cde7a4e99040c5a40433225ee282a1b0a06c523eaf4534d7f83fa1155b0047718cbc546a0d072b04b3564eea1b422273f548271a0bb2316053fa76991955ebd63159434ecebb4e466dae5a1073a6727627097a1049e617d91d361094fa68f0ff77987130305beaba2eda04df997b714d6c6f2c29a6ad5cb4022b02709b
|
||||||
|
|
||||||
|
Cipher = chacha20-poly1305
|
||||||
|
Key = 1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0
|
||||||
|
IV = 000000000102030405060708
|
||||||
|
AAD = f33388860000000000004e91
|
||||||
|
Tag = eead9d67890cbb22392336fea1851f39
|
||||||
|
Plaintext = 496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d447261667473206173207265666572656e6365206d6174657269616c206f7220746f2063697465207468656d206f74686572207468616e206173202fe2809c776f726b20696e2070726f67726573732e2fe2809d
|
||||||
|
Ciphertext = 64a0861575861af460f062c79be643bd5e805cfd345cf389f108670ac76c8cb24c6cfc18755d43eea09ee94e382d26b0bdb7b73c321b0100d4f03b7f355894cf332f830e710b97ce98c8a84abd0b948114ad176e008d33bd60f982b1ff37c8559797a06ef4f0ef61c186324e2b3506383606907b6a7c02b0f9f6157b53c867e4b9166c767b804d46a59b5216cde7a4e99040c5a40433225ee282a1b0a06c523eaf4534d7f83fa1155b0047718cbc546a0d072b04b3564eea1b422273f548271a0bb2316053fa76991955ebd63159434ecebb4e466dae5a1073a6727627097a1049e617d91d361094fa68f0ff77987130305beaba2eda04df997b714d6c6f2c29a6ad5cb4022b02709b
|
||||||
|
Operation = DECRYPT
|
||||||
|
Result = CIPHERFINAL_ERROR
|
||||||
|
|
||||||
|
# self-generated vectors
|
||||||
|
Cipher = chacha20-poly1305
|
||||||
|
Key = 1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0
|
||||||
|
IV = 000000000102030405060708
|
||||||
|
AAD = f33388860000000000004e91
|
||||||
|
Tag = d96119a40cd17f2527306866a3ef0413
|
||||||
|
Plaintext = 496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d4472616674732061732072
|
||||||
|
Ciphertext = 64a0861575861af460f062c79be643bd5e805cfd345cf389f108670ac76c8cb24c6cfc18755d43eea09ee94e382d26b0bdb7b73c321b0100d4f03b7f355894cf332f830e710b97ce98c8a84abd0b948114ad176e008d33bd60f982b1ff37c8559797a06ef4f0ef61c186324e2b3506383606907b6a7c02b0f9f6157b53c867e4b9166c767b804d46a59b5216cde7a4e99040c5a40433225ee282a1b0a06c523eaf4534d7f83fa1155b0047718cbc546a0d072b04b3564eea1b422273f548271a
|
||||||
|
|
||||||
|
Cipher = chacha20-poly1305
|
||||||
|
Key = 1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0
|
||||||
|
IV = 000000000102030405060708
|
||||||
|
AAD = f33388860000000000004e91
|
||||||
|
Tag = 53aee3189d2b747032378a6186feb43f
|
||||||
|
Plaintext = 496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d447261667473206173207265666572656e6365206d6174657269616c206f7220746f2063697465207468656d206f74686572207468616e206173202fe2809c776f726b20696e2070726f67496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d447261667473206173207265666572656e6365206d6174657269616c206f7220746f2063697465207468656d206f74686572207468616e206173202fe2809c776f726b20696e2070726f67
|
||||||
|
Ciphertext = 64a0861575861af460f062c79be643bd5e805cfd345cf389f108670ac76c8cb24c6cfc18755d43eea09ee94e382d26b0bdb7b73c321b0100d4f03b7f355894cf332f830e710b97ce98c8a84abd0b948114ad176e008d33bd60f982b1ff37c8559797a06ef4f0ef61c186324e2b3506383606907b6a7c02b0f9f6157b53c867e4b9166c767b804d46a59b5216cde7a4e99040c5a40433225ee282a1b0a06c523eaf4534d7f83fa1155b0047718cbc546a0d072b04b3564eea1b422273f548271a0bb2316053fa76991955ebd63159434ecebb4e466dae5a1073a6727627097a1049e617d91d361094fa68f0ff77987130305beaba2eda04df997b714d6c6f2c299da65ba25e6a85842bf0440fd98a9a2266b061c4b3a13327c090f9a0789f58aad805275e4378a525f19232bfbfb749ede38480f405cf43ec2f1f8619ebcbc80a89e92a859c7911e674977ab17d4a7126a6b8a477358ff14a344d276ef6e504e10268ac3619fcf90c2d6c03fc2e3d1f290d9bf26c1fa1495dd8f97eec6229a55c2354e4524143551a5cc370a1c622c9390530cff21c3e1ed50c5e3daf97518ccce34156bdbd7eafab8bd417aef25c6c927301731bd319d247a1d5c3186ed10bfd9a7a24bac30e3e4503ed9204154d338b79ea276e7058e7f20f4d4fd1ac93d63f611af7b6d006c2a72add0eedc497b19cb30a198816664f0da00155f2e2d6ac61
|
||||||
|
|
||||||
|
Cipher = chacha20-poly1305
|
||||||
|
Key = 1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0
|
||||||
|
IV = 000000000102030405060708
|
||||||
|
AAD = f33388860000000000004e91
|
||||||
|
Tag = e0723bce23528ce6ccb10ff9627038bf
|
||||||
|
Plaintext = 496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d447261667473206173207265666572656e6365206d6174657269616c206f7220746f2063697465207468656d206f74686572207468616e206173202fe2809c776f726b20696e2070726f67496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d447261667473206173207265666572656e6365206d6174657269616c206f7220746f2063697465207468656d206f74686572207468616e206173202fe2809c776f726b20696e2070726f67496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d
|
||||||
|
Ciphertext = 64a0861575861af460f062c79be643bd5e805cfd345cf389f108670ac76c8cb24c6cfc18755d43eea09ee94e382d26b0bdb7b73c321b0100d4f03b7f355894cf332f830e710b97ce98c8a84abd0b948114ad176e008d33bd60f982b1ff37c8559797a06ef4f0ef61c186324e2b3506383606907b6a7c02b0f9f6157b53c867e4b9166c767b804d46a59b5216cde7a4e99040c5a40433225ee282a1b0a06c523eaf4534d7f83fa1155b0047718cbc546a0d072b04b3564eea1b422273f548271a0bb2316053fa76991955ebd63159434ecebb4e466dae5a1073a6727627097a1049e617d91d361094fa68f0ff77987130305beaba2eda04df997b714d6c6f2c299da65ba25e6a85842bf0440fd98a9a2266b061c4b3a13327c090f9a0789f58aad805275e4378a525f19232bfbfb749ede38480f405cf43ec2f1f8619ebcbc80a89e92a859c7911e674977ab17d4a7126a6b8a477358ff14a344d276ef6e504e10268ac3619fcf90c2d6c03fc2e3d1f290d9bf26c1fa1495dd8f97eec6229a55c2354e4524143551a5cc370a1c622c9390530cff21c3e1ed50c5e3daf97518ccce34156bdbd7eafab8bd417aef25c6c927301731bd319d247a1d5c3186ed10bfd9a7a24bac30e3e4503ed9204154d338b79ea276e7058e7f20f4d4fd1ac93d63f611af7b6d006c2a72add0eedc497b19cb30a198816664f0da00155f2e2d6ac61045b296d614301e0ad4983308028850dd4feffe3a8163970306e4047f5a165cb4befbc129729cd2e286e837e9b606486d402acc3dec5bf8b92387f6e486f2140
|
||||||
|
|
||||||
|
Cipher = chacha20-poly1305
|
||||||
|
Key = 1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0
|
||||||
|
IV = ff000000000102030405060708
|
||||||
|
AAD = f33388860000000000004e91
|
||||||
|
Tag = e0723bce23528ce6ccb10ff9627038bf
|
||||||
|
Plaintext = 496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d447261667473206173207265666572656e6365206d6174657269616c206f7220746f2063697465207468656d206f74686572207468616e206173202fe2809c776f726b20696e2070726f67496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d447261667473206173207265666572656e6365206d6174657269616c206f7220746f2063697465207468656d206f74686572207468616e206173202fe2809c776f726b20696e2070726f67496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d
|
||||||
|
Ciphertext = 64a0861575861af460f062c79be643bd5e805cfd345cf389f108670ac76c8cb24c6cfc18755d43eea09ee94e382d26b0bdb7b73c321b0100d4f03b7f355894cf332f830e710b97ce98c8a84abd0b948114ad176e008d33bd60f982b1ff37c8559797a06ef4f0ef61c186324e2b3506383606907b6a7c02b0f9f6157b53c867e4b9166c767b804d46a59b5216cde7a4e99040c5a40433225ee282a1b0a06c523eaf4534d7f83fa1155b0047718cbc546a0d072b04b3564eea1b422273f548271a0bb2316053fa76991955ebd63159434ecebb4e466dae5a1073a6727627097a1049e617d91d361094fa68f0ff77987130305beaba2eda04df997b714d6c6f2c299da65ba25e6a85842bf0440fd98a9a2266b061c4b3a13327c090f9a0789f58aad805275e4378a525f19232bfbfb749ede38480f405cf43ec2f1f8619ebcbc80a89e92a859c7911e674977ab17d4a7126a6b8a477358ff14a344d276ef6e504e10268ac3619fcf90c2d6c03fc2e3d1f290d9bf26c1fa1495dd8f97eec6229a55c2354e4524143551a5cc370a1c622c9390530cff21c3e1ed50c5e3daf97518ccce34156bdbd7eafab8bd417aef25c6c927301731bd319d247a1d5c3186ed10bfd9a7a24bac30e3e4503ed9204154d338b79ea276e7058e7f20f4d4fd1ac93d63f611af7b6d006c2a72add0eedc497b19cb30a198816664f0da00155f2e2d6ac61045b296d614301e0ad4983308028850dd4feffe3a8163970306e4047f5a165cb4befbc129729cd2e286e837e9b606486d402acc3dec5bf8b92387f6e486f2140
|
||||||
|
Result = INVALID_IV_LENGTH
|
Loading…
Reference in New Issue
Block a user