mirror of
git://anongit.mindrot.org/openssh.git
synced 2025-02-16 13:56:52 +00:00
upstream: Replace non-idiomatic strtoul(, 16) to parse a region
of 2-character hex sequences with a low-level replacement designed just for the task. ok djm OpenBSD-Commit-ID: 67bab8b8a4329a19a0add5085eacd6f4cc215e85
This commit is contained in:
parent
019a5f483b
commit
c7fec708f3
26
ssh-pkcs11.c
26
ssh-pkcs11.c
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: ssh-pkcs11.c,v 1.59 2023/07/27 22:26:49 djm Exp $ */
|
/* $OpenBSD: ssh-pkcs11.c,v 1.60 2024/04/02 09:32:28 deraadt Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2010 Markus Friedl. All rights reserved.
|
* Copyright (c) 2010 Markus Friedl. All rights reserved.
|
||||||
* Copyright (c) 2014 Pedro Martelletto. All rights reserved.
|
* Copyright (c) 2014 Pedro Martelletto. All rights reserved.
|
||||||
@ -1385,6 +1385,20 @@ pkcs11_rsa_generate_private_key(struct pkcs11_provider *p, CK_ULONG slotidx,
|
|||||||
return pkcs11_fetch_rsa_pubkey(p, slotidx, &pubKey);
|
return pkcs11_fetch_rsa_pubkey(p, slotidx, &pubKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
h2i(char c)
|
||||||
|
{
|
||||||
|
if (c >= '0' && c <= '9')
|
||||||
|
c -= '0';
|
||||||
|
else if (c >= 'a' && c <= 'f')
|
||||||
|
c -= 'a';
|
||||||
|
else if (c >= 'A' && c <= 'F')
|
||||||
|
c -= 'A';
|
||||||
|
else
|
||||||
|
return -1;
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
pkcs11_decode_hex(const char *hex, unsigned char **dest, size_t *rlen)
|
pkcs11_decode_hex(const char *hex, unsigned char **dest, size_t *rlen)
|
||||||
{
|
{
|
||||||
@ -1404,11 +1418,13 @@ pkcs11_decode_hex(const char *hex, unsigned char **dest, size_t *rlen)
|
|||||||
|
|
||||||
ptr[2] = '\0';
|
ptr[2] = '\0';
|
||||||
for (i = 0; i < len; i++) {
|
for (i = 0; i < len; i++) {
|
||||||
ptr[0] = hex[2 * i];
|
int hi, low;
|
||||||
ptr[1] = hex[(2 * i) + 1];
|
|
||||||
if (!isxdigit(ptr[0]) || !isxdigit(ptr[1]))
|
hi = h2i(hex[2 * i]);
|
||||||
|
lo = h2i(hex[(2 * i) + 1]);
|
||||||
|
if (hi == -1 || lo == -1)
|
||||||
return -1;
|
return -1;
|
||||||
(*dest)[i] = (unsigned char)strtoul(ptr, NULL, 16);
|
(*dest)[i] = (hi << 4) | lo;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rlen)
|
if (rlen)
|
||||||
|
Loading…
Reference in New Issue
Block a user