Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/crypto/heimdal/lib/asn1/der_cmp.c
34889 views
1
/*
2
* Copyright (c) 2003-2005 Kungliga Tekniska Högskolan
3
* (Royal Institute of Technology, Stockholm, Sweden).
4
* All rights reserved.
5
*
6
* Redistribution and use in source and binary forms, with or without
7
* modification, are permitted provided that the following conditions
8
* are met:
9
*
10
* 1. Redistributions of source code must retain the above copyright
11
* notice, this list of conditions and the following disclaimer.
12
*
13
* 2. Redistributions in binary form must reproduce the above copyright
14
* notice, this list of conditions and the following disclaimer in the
15
* documentation and/or other materials provided with the distribution.
16
*
17
* 3. Neither the name of the Institute nor the names of its contributors
18
* may be used to endorse or promote products derived from this software
19
* without specific prior written permission.
20
*
21
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
22
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
25
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31
* SUCH DAMAGE.
32
*/
33
34
#include "der_locl.h"
35
36
int
37
der_heim_oid_cmp(const heim_oid *p, const heim_oid *q)
38
{
39
if (p->length != q->length)
40
return p->length - q->length;
41
return memcmp(p->components,
42
q->components,
43
p->length * sizeof(*p->components));
44
}
45
46
int
47
der_heim_octet_string_cmp(const heim_octet_string *p,
48
const heim_octet_string *q)
49
{
50
if (p->length != q->length)
51
return p->length - q->length;
52
return memcmp(p->data, q->data, p->length);
53
}
54
55
int
56
der_printable_string_cmp(const heim_printable_string *p,
57
const heim_printable_string *q)
58
{
59
return der_heim_octet_string_cmp(p, q);
60
}
61
62
int
63
der_ia5_string_cmp(const heim_ia5_string *p,
64
const heim_ia5_string *q)
65
{
66
return der_heim_octet_string_cmp(p, q);
67
}
68
69
int
70
der_heim_bit_string_cmp(const heim_bit_string *p,
71
const heim_bit_string *q)
72
{
73
int i, r1, r2;
74
if (p->length != q->length)
75
return p->length - q->length;
76
i = memcmp(p->data, q->data, p->length / 8);
77
if (i)
78
return i;
79
if ((p->length % 8) == 0)
80
return 0;
81
i = (p->length / 8);
82
r1 = ((unsigned char *)p->data)[i];
83
r2 = ((unsigned char *)q->data)[i];
84
i = 8 - (p->length % 8);
85
r1 = r1 >> i;
86
r2 = r2 >> i;
87
return r1 - r2;
88
}
89
90
int
91
der_heim_integer_cmp(const heim_integer *p,
92
const heim_integer *q)
93
{
94
if (p->negative != q->negative)
95
return q->negative - p->negative;
96
if (p->length != q->length)
97
return p->length - q->length;
98
return memcmp(p->data, q->data, p->length);
99
}
100
101
int
102
der_heim_bmp_string_cmp(const heim_bmp_string *p, const heim_bmp_string *q)
103
{
104
if (p->length != q->length)
105
return p->length - q->length;
106
return memcmp(p->data, q->data, q->length * sizeof(q->data[0]));
107
}
108
109
int
110
der_heim_universal_string_cmp(const heim_universal_string *p,
111
const heim_universal_string *q)
112
{
113
if (p->length != q->length)
114
return p->length - q->length;
115
return memcmp(p->data, q->data, q->length * sizeof(q->data[0]));
116
}
117
118