初始提交
This commit is contained in:
@@ -0,0 +1,170 @@
|
||||
/**
|
||||
* Copyright (C) 2015-2016 Virgil Security Inc.
|
||||
*
|
||||
* Lead Maintainer: Virgil Security Inc. <support@virgilsecurity.com>
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* (1) Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* (2) Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* (3) Neither the name of the copyright holder nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of extension to mbed TLS (https://tls.mbed.org)
|
||||
*/
|
||||
/**
|
||||
* \file ecies_envelope.h
|
||||
*
|
||||
* Provides function to process ECIES envelope ASN.1 structure:
|
||||
*
|
||||
* ECIES-Envelope-Schema DEFINITIONS EXPLICIT TAGS ::=
|
||||
* BEGIN
|
||||
*
|
||||
* IMPORTS
|
||||
*
|
||||
* -- Imports from RFC 5280, Appendix A.1
|
||||
* AlgorithmIdentifier
|
||||
* FROM PKIX1Explicit88
|
||||
* { iso(1) identified-organization(3) dod(6)
|
||||
* internet(1) security(5) mechanisms(5) pkix(7)
|
||||
* mod(0) pkix1-explicit(18) }
|
||||
*
|
||||
* -- Imports from ISO/IEC 18033-2, Appendix B
|
||||
* KeyDerivationFunction
|
||||
* FROM AlgorithmObjectIdentifiers
|
||||
* { iso(1) standard(0) encryption-algorithms(18033) part(2)
|
||||
* asn1-module(0) algorithm-object-identifiers(0) };
|
||||
*
|
||||
*
|
||||
* ECIES-Envelope ::= SEQUENCE {
|
||||
* version INTEGER { v0(0) },
|
||||
* originator OriginatorPublicKey,
|
||||
* kdf KeyDerivationFunction,
|
||||
* hmac DigestInfo,
|
||||
* encryptedContent EncryptedContentInfo
|
||||
* }
|
||||
*
|
||||
* OriginatorPublicKey ::= SEQUENCE {
|
||||
* algorithm AlgorithmIdentifier,
|
||||
* publicKey BIT STRING
|
||||
* }
|
||||
*
|
||||
* DigestInfo ::= SEQUENCE {
|
||||
* digestAlgorithm DigestAlgorithmIdentifier,
|
||||
* digest Digest
|
||||
* }
|
||||
*
|
||||
* DigestAlgorithmIdentifier ::= AlgorithmIdentifier
|
||||
*
|
||||
* Digest ::= OCTET STRING
|
||||
*
|
||||
* EncryptedContentInfo ::= SEQUENCE {
|
||||
* contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier,
|
||||
* encryptedContent EncryptedContent
|
||||
* }
|
||||
*
|
||||
* ContentEncryptionAlgorithmIdentifier :: = AlgorithmIdentifier
|
||||
*
|
||||
* EncryptedContent ::= OCTET STRING
|
||||
* END
|
||||
*/
|
||||
|
||||
#ifndef MBEDTLS_ECIES_ENVELOPE_H
|
||||
#define MBEDTLS_ECIES_ENVELOPE_H
|
||||
|
||||
#if !defined(MBEDTLS_CONFIG_FILE)
|
||||
#include "config.h"
|
||||
#else
|
||||
#include MBEDTLS_CONFIG_FILE
|
||||
#endif
|
||||
|
||||
#include "md.h"
|
||||
#include "kdf.h"
|
||||
#include "cipher.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* \brief Read actual envelope length.
|
||||
*/
|
||||
int mbedtls_ecies_read_envelope(unsigned char **p, const unsigned char *end, size_t *len);
|
||||
/**
|
||||
* \brief Read envelope version.
|
||||
*/
|
||||
int mbedtls_ecies_read_version(unsigned char **p, const unsigned char *end, int *version);
|
||||
/**
|
||||
* \brief Read key derivation function and underlying digest function.
|
||||
*/
|
||||
int mbedtls_ecies_read_kdf(unsigned char **p, const unsigned char *end,
|
||||
mbedtls_kdf_type_t *kdf_type, mbedtls_md_type_t *md_type);
|
||||
/**
|
||||
* \brief Read HMAC.
|
||||
*/
|
||||
int mbedtls_ecies_read_hmac(unsigned char **p, const unsigned char *end,
|
||||
mbedtls_md_type_t *hmac_type, unsigned char **hmac, size_t *hmac_len);
|
||||
/**
|
||||
* \brief Read encrypted content info.
|
||||
*/
|
||||
int mbedtls_ecies_read_content_info(unsigned char **p, const unsigned char *end,
|
||||
mbedtls_cipher_type_t *cipher_type, unsigned char **iv, size_t *iv_len,
|
||||
unsigned char **data, size_t *data_len);
|
||||
/**
|
||||
* \brief Write actual envelope length.
|
||||
* \return The length written or a negative error code.
|
||||
*/
|
||||
int mbedtls_ecies_write_envelope(unsigned char **p, unsigned char *start, size_t len);
|
||||
/**
|
||||
* \brief Write envelope version.
|
||||
* \return The length written or a negative error code.
|
||||
*/
|
||||
int mbedtls_ecies_write_version(unsigned char **p, unsigned char *start, int version);
|
||||
/**
|
||||
* \brief Write key derivation function and underlying digest function.
|
||||
* \return The length written or a negative error code.
|
||||
*/
|
||||
int mbedtls_ecies_write_kdf(unsigned char **p, unsigned char *start,
|
||||
mbedtls_kdf_type_t kdf_type, mbedtls_md_type_t md_type);
|
||||
/**
|
||||
* \brief Write HMAC.
|
||||
* \return The length written or a negative error code.
|
||||
*/
|
||||
int mbedtls_ecies_write_hmac(unsigned char **p, unsigned char *start,
|
||||
mbedtls_md_type_t hmac_type, const unsigned char *hmac, size_t hmac_len);
|
||||
/**
|
||||
* \brief Write metadata for encrypted content info.
|
||||
* \return The length written or a negative error code.
|
||||
* \note Assume that *p param points to the encrypted data.
|
||||
*/
|
||||
int mbedtls_ecies_write_content_info(unsigned char **p, unsigned char *start,
|
||||
mbedtls_cipher_type_t cipher_type, const unsigned char *iv, size_t iv_len, size_t data_len);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* MBEDTLS_ECIES_ENVELOPE_H */
|
||||
Reference in New Issue
Block a user