mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-03-26 08:55:40 +00:00
X.509: Add utility functions to render OIDs as strings
Add a pair of utility functions to render OIDs as strings. The first takes an encoded OID and turns it into a "a.b.c.d" form string: int sprint_oid(const void *data, size_t datasize, char *buffer, size_t bufsize); The second takes an OID enum index and calls the first on the data held therein: int sprint_OID(enum OID oid, char *buffer, size_t bufsize); Signed-off-by: David Howells <dhowells@redhat.com> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
parent
a77ad6ea0b
commit
4f73175d03
2 changed files with 83 additions and 0 deletions
|
@ -86,5 +86,7 @@ enum OID {
|
||||||
};
|
};
|
||||||
|
|
||||||
extern enum OID look_up_OID(const void *data, size_t datasize);
|
extern enum OID look_up_OID(const void *data, size_t datasize);
|
||||||
|
extern int sprint_oid(const void *, size_t, char *, size_t);
|
||||||
|
extern int sprint_OID(enum OID, char *, size_t);
|
||||||
|
|
||||||
#endif /* _LINUX_OID_REGISTRY_H */
|
#endif /* _LINUX_OID_REGISTRY_H */
|
||||||
|
|
|
@ -11,6 +11,9 @@
|
||||||
|
|
||||||
#include <linux/export.h>
|
#include <linux/export.h>
|
||||||
#include <linux/oid_registry.h>
|
#include <linux/oid_registry.h>
|
||||||
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/errno.h>
|
||||||
|
#include <linux/bug.h>
|
||||||
#include "oid_registry_data.c"
|
#include "oid_registry_data.c"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -87,3 +90,81 @@ enum OID look_up_OID(const void *data, size_t datasize)
|
||||||
return OID__NR;
|
return OID__NR;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(look_up_OID);
|
EXPORT_SYMBOL_GPL(look_up_OID);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* sprint_OID - Print an Object Identifier into a buffer
|
||||||
|
* @data: The encoded OID to print
|
||||||
|
* @datasize: The size of the encoded OID
|
||||||
|
* @buffer: The buffer to render into
|
||||||
|
* @bufsize: The size of the buffer
|
||||||
|
*
|
||||||
|
* The OID is rendered into the buffer in "a.b.c.d" format and the number of
|
||||||
|
* bytes is returned. -EBADMSG is returned if the data could not be intepreted
|
||||||
|
* and -ENOBUFS if the buffer was too small.
|
||||||
|
*/
|
||||||
|
int sprint_oid(const void *data, size_t datasize, char *buffer, size_t bufsize)
|
||||||
|
{
|
||||||
|
const unsigned char *v = data, *end = v + datasize;
|
||||||
|
unsigned long num;
|
||||||
|
unsigned char n;
|
||||||
|
size_t ret;
|
||||||
|
int count;
|
||||||
|
|
||||||
|
if (v >= end)
|
||||||
|
return -EBADMSG;
|
||||||
|
|
||||||
|
n = *v++;
|
||||||
|
ret = count = snprintf(buffer, bufsize, "%u.%u", n / 40, n % 40);
|
||||||
|
buffer += count;
|
||||||
|
bufsize -= count;
|
||||||
|
if (bufsize == 0)
|
||||||
|
return -ENOBUFS;
|
||||||
|
|
||||||
|
while (v < end) {
|
||||||
|
num = 0;
|
||||||
|
n = *v++;
|
||||||
|
if (!(n & 0x80)) {
|
||||||
|
num = n;
|
||||||
|
} else {
|
||||||
|
num = n & 0x7f;
|
||||||
|
do {
|
||||||
|
if (v >= end)
|
||||||
|
return -EBADMSG;
|
||||||
|
n = *v++;
|
||||||
|
num <<= 7;
|
||||||
|
num |= n & 0x7f;
|
||||||
|
} while (n & 0x80);
|
||||||
|
}
|
||||||
|
ret += count = snprintf(buffer, bufsize, ".%lu", num);
|
||||||
|
buffer += count;
|
||||||
|
bufsize -= count;
|
||||||
|
if (bufsize == 0)
|
||||||
|
return -ENOBUFS;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(sprint_oid);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* sprint_OID - Print an Object Identifier into a buffer
|
||||||
|
* @oid: The OID to print
|
||||||
|
* @buffer: The buffer to render into
|
||||||
|
* @bufsize: The size of the buffer
|
||||||
|
*
|
||||||
|
* The OID is rendered into the buffer in "a.b.c.d" format and the number of
|
||||||
|
* bytes is returned.
|
||||||
|
*/
|
||||||
|
int sprint_OID(enum OID oid, char *buffer, size_t bufsize)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
BUG_ON(oid >= OID__NR);
|
||||||
|
|
||||||
|
ret = sprint_oid(oid_data + oid_index[oid],
|
||||||
|
oid_index[oid + 1] - oid_index[oid],
|
||||||
|
buffer, bufsize);
|
||||||
|
BUG_ON(ret == -EBADMSG);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(sprint_OID);
|
||||||
|
|
Loading…
Add table
Reference in a new issue