diff options
author | Richard Levitte <levitte@openssl.org> | 2017-03-30 13:31:16 +0200 |
---|---|---|
committer | Richard Levitte <levitte@openssl.org> | 2017-04-04 11:29:23 +0200 |
commit | 93f7d6fc10b75814d90d804edb56947cacf8964e (patch) | |
tree | e66b5bc1a1826a70485d1a3cd734e1a5a85fa3d2 /crypto/asn1/a_int.c | |
parent | 8edb4ee1a237b43d9520eaa658a4ad2671e8dd0c (diff) |
Implement internal ASN.1 types INT32, UINT32, INT64, UINT64
Also Z varieties.
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/3088)
Diffstat (limited to 'crypto/asn1/a_int.c')
-rw-r--r-- | crypto/asn1/a_int.c | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/crypto/asn1/a_int.c b/crypto/asn1/a_int.c index c40c7faed2..4981ddbfdb 100644 --- a/crypto/asn1/a_int.c +++ b/crypto/asn1/a_int.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-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 @@ -622,3 +622,32 @@ BIGNUM *ASN1_ENUMERATED_to_BN(const ASN1_ENUMERATED *ai, BIGNUM *bn) { return asn1_string_to_bn(ai, bn, V_ASN1_ENUMERATED); } + +/* Internal functions used by x_int64.c */ +int c2i_uint64_int(uint64_t *ret, int *neg, const unsigned char **pp, long len) +{ + unsigned char buf[sizeof(uint64_t)]; + size_t buflen; + + buflen = c2i_ibuf(NULL, NULL, *pp, len); + if (buflen == 0) + return 0; + if (buflen > sizeof(uint64_t)) { + ASN1err(ASN1_F_C2I_UINT64_INT, ASN1_R_TOO_LARGE); + return 0; + } + (void)c2i_ibuf(buf, neg, *pp, len); + return asn1_get_uint64(ret, buf, buflen); +} + +int i2c_uint64_int(unsigned char *p, uint64_t r, int neg) +{ + unsigned char buf[sizeof(uint64_t)]; + size_t buflen; + + buflen = asn1_put_uint64(buf, r); + if (p == NULL) + return i2c_ibuf(buf, buflen, neg, NULL); + return i2c_ibuf(buf, buflen, neg, &p); +} + |