]> git.ipfire.org Git - thirdparty/openssl.git/blame - crypto/objects/obj_lib.c
Remove unnecessary #include <openssl/lhash.h> directives.
[thirdparty/openssl.git] / crypto / objects / obj_lib.c
CommitLineData
62867571 1/*
f32b0abe 2 * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved.
d02b48c6 3 *
62867571
RS
4 * Licensed under the OpenSSL license (the "License"). You may not use
5 * this file except in compliance with the License. You can obtain a copy
6 * in the file LICENSE in the source distribution or at
7 * https://www.openssl.org/source/license.html
d02b48c6
RE
8 */
9
10#include <stdio.h>
b39fc560 11#include "internal/cryptlib.h"
ec577822
BM
12#include <openssl/objects.h>
13#include <openssl/buffer.h>
2e430277 14#include "internal/asn1_int.h"
d02b48c6 15
8d28d5f8 16ASN1_OBJECT *OBJ_dup(const ASN1_OBJECT *o)
0f113f3e
MC
17{
18 ASN1_OBJECT *r;
d02b48c6 19
0f113f3e 20 if (o == NULL)
52832e47
DSH
21 return NULL;
22 /* If object isn't dynamic it's an internal OID which is never freed */
0f113f3e 23 if (!(o->flags & ASN1_OBJECT_FLAG_DYNAMIC))
52832e47 24 return ((ASN1_OBJECT *)o);
d02b48c6 25
0f113f3e
MC
26 r = ASN1_OBJECT_new();
27 if (r == NULL) {
28 OBJerr(OBJ_F_OBJ_DUP, ERR_R_ASN1_LIB);
29 return (NULL);
30 }
d02b48c6 31
52832e47
DSH
32 /* Set dynamic flags so everything gets freed up on error */
33
0f113f3e
MC
34 r->flags = o->flags | (ASN1_OBJECT_FLAG_DYNAMIC |
35 ASN1_OBJECT_FLAG_DYNAMIC_STRINGS |
36 ASN1_OBJECT_FLAG_DYNAMIC_DATA);
52832e47
DSH
37
38 if (o->length > 0 && (r->data = OPENSSL_memdup(o->data, o->length)) == NULL)
39 goto err;
40
41 r->length = o->length;
42 r->nid = o->nid;
43
44 if (o->ln != NULL && (r->ln = OPENSSL_strdup(o->ln)) == NULL)
45 goto err;
46
47 if (o->sn != NULL && (r->sn = OPENSSL_strdup(o->sn)) == NULL)
48 goto err;
49
50 return r;
0f113f3e 51 err:
52832e47 52 ASN1_OBJECT_free(r);
0f113f3e 53 OBJerr(OBJ_F_OBJ_DUP, ERR_R_MALLOC_FAILURE);
52832e47 54 return NULL;
0f113f3e 55}
d02b48c6 56
8d28d5f8 57int OBJ_cmp(const ASN1_OBJECT *a, const ASN1_OBJECT *b)
0f113f3e
MC
58{
59 int ret;
d02b48c6 60
0f113f3e
MC
61 ret = (a->length - b->length);
62 if (ret)
63 return (ret);
64 return (memcmp(a->data, b->data, a->length));
65}