003 File Manager
Current Path:
/usr/src/crypto/openssl/crypto/asn1
usr
/
src
/
crypto
/
openssl
/
crypto
/
asn1
/
📁
..
📄
a_bitstr.c
(5.34 KB)
📄
a_d2i_fp.c
(6.33 KB)
📄
a_digest.c
(1.52 KB)
📄
a_dup.c
(1.51 KB)
📄
a_gentm.c
(2.12 KB)
📄
a_i2d_fp.c
(2.25 KB)
📄
a_int.c
(16.55 KB)
📄
a_mbstr.c
(9.55 KB)
📄
a_object.c
(10.16 KB)
📄
a_octet.c
(813 B)
📄
a_print.c
(2.14 KB)
📄
a_sign.c
(7.08 KB)
📄
a_strex.c
(17.37 KB)
📄
a_strnid.c
(5.95 KB)
📄
a_time.c
(14.91 KB)
📄
a_type.c
(3.51 KB)
📄
a_utctm.c
(2.23 KB)
📄
a_utf8.c
(5.89 KB)
📄
a_verify.c
(4.92 KB)
📄
ameth_lib.c
(14.51 KB)
📄
asn1_err.c
(18.92 KB)
📄
asn1_gen.c
(22.63 KB)
📄
asn1_item_list.c
(1.06 KB)
📄
asn1_item_list.h
(5.5 KB)
📄
asn1_lib.c
(9.38 KB)
📄
asn1_local.h
(3.27 KB)
📄
asn1_par.c
(13 KB)
📄
asn_mime.c
(27.92 KB)
📄
asn_moid.c
(2.46 KB)
📄
asn_mstbl.c
(3.43 KB)
📄
asn_pack.c
(1.59 KB)
📄
bio_asn1.c
(11.09 KB)
📄
bio_ndef.c
(5.29 KB)
📄
build.info
(837 B)
📄
charmap.h
(1.41 KB)
📄
charmap.pl
(3.58 KB)
📄
d2i_pr.c
(3.64 KB)
📄
d2i_pu.c
(2.01 KB)
📄
evp_asn1.c
(2.89 KB)
📄
f_int.c
(3.94 KB)
📄
f_string.c
(3.44 KB)
📄
i2d_pr.c
(1006 B)
📄
i2d_pu.c
(1.05 KB)
📄
n_pkey.c
(1.89 KB)
📄
nsseq.c
(1.11 KB)
📄
p5_pbe.c
(2.52 KB)
📄
p5_pbev2.c
(6 KB)
📄
p5_scrypt.c
(7.76 KB)
📄
p8_pkey.c
(2.53 KB)
📄
standard_methods.h
(1.35 KB)
📄
t_bitst.c
(1.56 KB)
📄
t_pkey.c
(2.52 KB)
📄
t_spki.c
(1.75 KB)
📄
tasn_dec.c
(36.99 KB)
📄
tasn_enc.c
(18.86 KB)
📄
tasn_fre.c
(5.34 KB)
📄
tasn_new.c
(8.95 KB)
📄
tasn_prn.c
(14.63 KB)
📄
tasn_scn.c
(1.37 KB)
📄
tasn_typ.c
(2.94 KB)
📄
tasn_utl.c
(6.64 KB)
📄
tbl_standard.h
(2.7 KB)
📄
x_algor.c
(3.31 KB)
📄
x_bignum.c
(4.05 KB)
📄
x_info.c
(895 B)
📄
x_int64.c
(7.83 KB)
📄
x_long.c
(5.42 KB)
📄
x_pkey.c
(1.12 KB)
📄
x_sig.c
(1.05 KB)
📄
x_spki.c
(961 B)
📄
x_val.c
(636 B)
Editing: a_verify.c
/* * Copyright 1995-2016 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 */ #include <stdio.h> #include <time.h> #include <sys/types.h> #include "internal/cryptlib.h" #include <openssl/bn.h> #include <openssl/x509.h> #include <openssl/objects.h> #include <openssl/buffer.h> #include <openssl/evp.h> #include "crypto/asn1.h" #include "crypto/evp.h" #ifndef NO_ASN1_OLD int ASN1_verify(i2d_of_void *i2d, X509_ALGOR *a, ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey) { EVP_MD_CTX *ctx = EVP_MD_CTX_new(); const EVP_MD *type; unsigned char *p, *buf_in = NULL; int ret = -1, i, inl; if (ctx == NULL) { ASN1err(ASN1_F_ASN1_VERIFY, ERR_R_MALLOC_FAILURE); goto err; } i = OBJ_obj2nid(a->algorithm); type = EVP_get_digestbyname(OBJ_nid2sn(i)); if (type == NULL) { ASN1err(ASN1_F_ASN1_VERIFY, ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM); goto err; } if (signature->type == V_ASN1_BIT_STRING && signature->flags & 0x7) { ASN1err(ASN1_F_ASN1_VERIFY, ASN1_R_INVALID_BIT_STRING_BITS_LEFT); goto err; } inl = i2d(data, NULL); if (inl <= 0) { ASN1err(ASN1_F_ASN1_VERIFY, ERR_R_INTERNAL_ERROR); goto err; } buf_in = OPENSSL_malloc((unsigned int)inl); if (buf_in == NULL) { ASN1err(ASN1_F_ASN1_VERIFY, ERR_R_MALLOC_FAILURE); goto err; } p = buf_in; i2d(data, &p); ret = EVP_VerifyInit_ex(ctx, type, NULL) && EVP_VerifyUpdate(ctx, (unsigned char *)buf_in, inl); OPENSSL_clear_free(buf_in, (unsigned int)inl); if (!ret) { ASN1err(ASN1_F_ASN1_VERIFY, ERR_R_EVP_LIB); goto err; } ret = -1; if (EVP_VerifyFinal(ctx, (unsigned char *)signature->data, (unsigned int)signature->length, pkey) <= 0) { ASN1err(ASN1_F_ASN1_VERIFY, ERR_R_EVP_LIB); ret = 0; goto err; } ret = 1; err: EVP_MD_CTX_free(ctx); return ret; } #endif int ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *a, ASN1_BIT_STRING *signature, void *asn, EVP_PKEY *pkey) { EVP_MD_CTX *ctx = NULL; unsigned char *buf_in = NULL; int ret = -1, inl = 0; int mdnid, pknid; size_t inll = 0; if (!pkey) { ASN1err(ASN1_F_ASN1_ITEM_VERIFY, ERR_R_PASSED_NULL_PARAMETER); return -1; } if (signature->type == V_ASN1_BIT_STRING && signature->flags & 0x7) { ASN1err(ASN1_F_ASN1_ITEM_VERIFY, ASN1_R_INVALID_BIT_STRING_BITS_LEFT); return -1; } ctx = EVP_MD_CTX_new(); if (ctx == NULL) { ASN1err(ASN1_F_ASN1_ITEM_VERIFY, ERR_R_MALLOC_FAILURE); goto err; } /* Convert signature OID into digest and public key OIDs */ if (!OBJ_find_sigid_algs(OBJ_obj2nid(a->algorithm), &mdnid, &pknid)) { ASN1err(ASN1_F_ASN1_ITEM_VERIFY, ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM); goto err; } if (mdnid == NID_undef) { if (!pkey->ameth || !pkey->ameth->item_verify) { ASN1err(ASN1_F_ASN1_ITEM_VERIFY, ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM); goto err; } ret = pkey->ameth->item_verify(ctx, it, asn, a, signature, pkey); /* * Return value of 2 means carry on, anything else means we exit * straight away: either a fatal error of the underlying verification * routine handles all verification. */ if (ret != 2) goto err; ret = -1; } else { const EVP_MD *type = EVP_get_digestbynid(mdnid); if (type == NULL) { ASN1err(ASN1_F_ASN1_ITEM_VERIFY, ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM); goto err; } /* Check public key OID matches public key type */ if (EVP_PKEY_type(pknid) != pkey->ameth->pkey_id) { ASN1err(ASN1_F_ASN1_ITEM_VERIFY, ASN1_R_WRONG_PUBLIC_KEY_TYPE); goto err; } if (!EVP_DigestVerifyInit(ctx, NULL, type, NULL, pkey)) { ASN1err(ASN1_F_ASN1_ITEM_VERIFY, ERR_R_EVP_LIB); ret = 0; goto err; } } inl = ASN1_item_i2d(asn, &buf_in, it); if (inl <= 0) { ASN1err(ASN1_F_ASN1_ITEM_VERIFY, ERR_R_INTERNAL_ERROR); goto err; } if (buf_in == NULL) { ASN1err(ASN1_F_ASN1_ITEM_VERIFY, ERR_R_MALLOC_FAILURE); goto err; } inll = inl; ret = EVP_DigestVerify(ctx, signature->data, (size_t)signature->length, buf_in, inl); if (ret <= 0) { ASN1err(ASN1_F_ASN1_ITEM_VERIFY, ERR_R_EVP_LIB); goto err; } ret = 1; err: OPENSSL_clear_free(buf_in, inll); EVP_MD_CTX_free(ctx); return ret; }
Upload File
Create Folder