From d42d0a4dc7925e3ea398821028a254c94665d733 Mon Sep 17 00:00:00 2001 From: Pauli Date: Wed, 1 Feb 2017 10:10:13 +1000 Subject: Implementation of the ARIA cipher as described in RFC 5794. This implementation is written in endian agnostic C code. No attempt at providing machine specific assembly code has been made. This implementation expands the evptests by including the test cases from RFC 5794 and ARIA official site rather than providing an individual test case. Support for ARIA has been integrated into the command line applications, but not TLS. Implemented modes are CBC, CFB1, CFB8, CFB128, CTR, ECB and OFB128. Reviewed-by: Andy Polyakov Reviewed-by: Rich Salz (Merged from https://github.com/openssl/openssl/pull/2337) --- crypto/include/internal/aria.h | 56 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 crypto/include/internal/aria.h (limited to 'crypto/include') diff --git a/crypto/include/internal/aria.h b/crypto/include/internal/aria.h new file mode 100644 index 0000000000..4d37189ae4 --- /dev/null +++ b/crypto/include/internal/aria.h @@ -0,0 +1,56 @@ +/* + * Copyright 2006-2017 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (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 + */ + +/* ==================================================================== + * Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved. + */ + +#ifndef HEADER_ARIA_H +# define HEADER_ARIA_H + +# include + +# ifdef OPENSSL_NO_ARIA +# error ARIA is disabled. +# endif + +# include + +# define ARIA_ENCRYPT 1 +# define ARIA_DECRYPT 0 + +# define ARIA_BLOCK_SIZE 16 /* Size of each encryption/decription block */ +# define ARIA_MAX_KEYS 17 /* Number of keys needed in the worst case */ + +# ifdef __cplusplus +extern "C" { +# endif + +typedef unsigned char ARIA_u128[ARIA_BLOCK_SIZE]; + +struct aria_key_st { + unsigned int rounds; + ARIA_u128 rd_key[ARIA_MAX_KEYS]; +}; +typedef struct aria_key_st ARIA_KEY; + + +int aria_set_encrypt_key(const unsigned char *userKey, const int bits, + ARIA_KEY *key); +int aria_set_decrypt_key(const unsigned char *userKey, const int bits, + ARIA_KEY *key); + +void aria_encrypt(const unsigned char *in, unsigned char *out, + const ARIA_KEY *key); + +# ifdef __cplusplus +} +# endif + +#endif -- cgit v1.2.3