This commit is contained in:
Zhi Guan
2021-09-10 11:29:16 +08:00
parent ae001fbf15
commit bcad2eb8dd
175 changed files with 5701 additions and 8583 deletions

View File

@@ -1,49 +1,17 @@
/*
* Copyright (c) 2014 - 2021 The GmSSL Project. All rights reserved.
/*
* Copyright 2014-2021 The GmSSL Project Authors. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* http://www.apache.org/licenses/LICENSE-2.0
*
* 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. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the GmSSL Project.
* (http://gmssl.org/)"
*
* 4. The name "GmSSL Project" must not be used to endorse or promote
* products derived from this software without prior written
* permission. For written permission, please contact
* guanzhi1980@gmail.com.
*
* 5. Products derived from this software may not be called "GmSSL"
* nor may "GmSSL" appear in their names without prior written
* permission of the GmSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the GmSSL Project
* (http://gmssl.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED 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 GmSSL PROJECT OR
* ITS CONTRIBUTORS 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.
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef GMSSL_X509_H
@@ -168,38 +136,36 @@ AlgorithmIdentifier ::= SEQUENCE {
当 algorithm 为 ECDSA/SM2 时parameters 为空
当 algorithm 为 RSA 时parameters 为 ASN1_NULL 对象
*/
int x509_signature_algor_to_der(int algor, uint8_t **out, size_t *outlen);
int x509_signature_algor_from_der(
int *algor, uint32_t algor_nodes[32], size_t *algor_nodes_count,
const uint8_t **in, size_t *inlen);
const char *x509_digest_algor_name(int algor);
int x509_digest_algor_to_der(int oid, uint8_t **out, size_t *outlen);
int x509_digest_algor_from_der(int *oid, uint32_t *nodes, size_t *nodes_count,
int x509_digest_algor_from_name(const char *name);
int x509_digest_algor_to_der(int algor, uint8_t **out, size_t *outlen);
int x509_digest_algor_from_der(int *algor, uint32_t *nodes, size_t *nodes_count,
const uint8_t **in, size_t *inlen);
const char *x509_encryption_algor_name(int algor);
int x509_encryption_algor_to_der(int cipher, const uint8_t *iv, size_t ivlen,
int x509_encryption_algor_from_name(const char *name);
int x509_encryption_algor_to_der(int algor, const uint8_t *iv, size_t ivlen,
uint8_t **out, size_t *outlen);
int x509_encryption_algor_from_der(
int *algor, uint32_t algor_nodes[32], size_t *algor_nodes_count,
int x509_encryption_algor_from_der(int *algor, uint32_t *nodes, size_t *nodes_count,
const uint8_t **iv, size_t *ivlen,
const uint8_t **in, size_t *inlen);
int x509_public_key_encryption_algor_to_der(int algor, uint8_t **out, size_t *outlen);
const char *x509_signature_algor_name(int algor);
int x509_signature_algor_from_name(const char *name);
int x509_signature_algor_to_der(int algor, uint8_t **out, size_t *outlen);
int x509_signature_algor_from_der(int *algor, uint32_t *nodes, size_t *nodes_count,
const uint8_t **in, size_t *inlen);
int x509_public_key_encryption_algor_from_der(int *algor,
uint32_t *nodes, size_t *nodes_count,
const char *x509_public_key_encryption_algor_name(int algor);
int x509_public_key_encryption_algor_from_name(const char *name);
int x509_public_key_encryption_algor_to_der(int algor, uint8_t **out, size_t *outlen);
int x509_public_key_encryption_algor_from_der(int *algor, uint32_t *nodes, size_t *nodes_count,
const uint8_t **params, size_t *params_len,
const uint8_t **in, size_t *inlen);
/*
SubjectPublicKeyInfo ::= SEQUENCE {
algorithm AlgorithmIdentifier,
@@ -799,8 +765,9 @@ int x509_certificate_get_basic_constraints(const X509_CERTIFICATE *cert,
int x509_basic_constraints_print(FILE *fp, const uint8_t *data, size_t datalen, int format, int indent);
int x509_key_usage_print(FILE *fp, const uint8_t *data, size_t datalen, int format, int indent);
int x509_ext_key_usage_print(FILE *fp, const uint8_t *data, size_t datalen, int format, int indent);
int x509_authority_key_identifier_print(FILE *fp, const uint8_t *data, size_t datalen, int format, int indent);
int x509_policy_constraints_print(FILE *fp, const uint8_t *p, size_t len, int format, int indent);
// Extension 10. Name Constraints
@@ -1099,11 +1066,12 @@ typedef struct {
int x509_cert_request_info_to_der(const X509_CERT_REQUEST_INFO *a, uint8_t **out, size_t *outlen);
int x509_cert_request_info_from_der(X509_CERT_REQUEST_INFO *a, const uint8_t **in, size_t *inlen);
int x509_cert_request_info_print(FILE *fp, const X509_CERT_REQUEST_INFO *a, int format, int indent);
typedef struct {
X509_CERT_REQUEST_INFO req_info;
int signature_algor;
uint8_t signature[128];
uint8_t signature[SM2_MAX_SIGNATURE_SIZE];
size_t signature_len;
} X509_CERT_REQUEST;