本文整理汇总了C++中psMalloc函数的典型用法代码示例。如果您正苦于以下问题:C++ psMalloc函数的具体用法?C++ psMalloc怎么用?C++ psMalloc使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了psMalloc函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: matrixSslLoadPsk
/*
Add a pre-shared key and ID to the static table in the first NULL spot
*/
int32 matrixSslLoadPsk(sslKeys_t *keys, unsigned char *key, uint32 keyLen,
unsigned char *id, uint32 idLen)
{
psPsk_t *psk, *list;
if (keys == NULL || key == NULL || id == NULL) {
return PS_ARG_FAIL;
}
if (keyLen > SSL_PSK_MAX_KEY_SIZE) {
psTraceIntInfo("Can't add PSK. Key too large: %d\n", keyLen);
return PS_ARG_FAIL;
}
if (idLen > SSL_PSK_MAX_ID_SIZE) {
psTraceIntInfo("Can't add PSK. Key ID too large: %d\n", idLen);
return PS_ARG_FAIL;
}
if (keyLen < 1 || idLen < 1) {
psTraceInfo("Can't add PSK. Both key and identity length must be >0\n");
return PS_ARG_FAIL;
}
if ((psk = psMalloc(keys->pool, sizeof(psPsk_t))) == NULL) {
return PS_MEM_FAIL;
}
memset(psk, 0, sizeof(psPsk_t));
if ((psk->pskKey = psMalloc(keys->pool, keyLen)) == NULL) {
psFree(psk);
return PS_MEM_FAIL;
}
if ((psk->pskId = psMalloc(keys->pool, idLen)) == NULL) {
psFree(psk->pskKey);
psFree(psk);
return PS_MEM_FAIL;
}
memcpy(psk->pskKey, key, keyLen);
psk->pskLen = keyLen;
memcpy(psk->pskId, id, idLen);
psk->pskIdLen = idLen;
if (keys->pskKeys == NULL) {
keys->pskKeys = psk;
} else {
list = keys->pskKeys;
while (list->next != NULL) {
list = list->next;
}
list->next = psk;
}
return 0;
}
示例2: psParseList
/*
Creates a simple linked list from a given stream and separator char
Memory info:
Callers do not have to free 'items' on function failure.
*/
int32 psParseList(psPool_t *pool, char *list, const char separator,
psList_t **items)
{
psList_t *litems, *start, *prev;
uint32 itemLen, listLen;
char *tmp;
*items = NULL;
prev = NULL;
listLen = (int32)strlen(list) + 1;
if (listLen == 1) {
return PS_ARG_FAIL;
}
start = litems = psMalloc(pool, sizeof(psList_t));
if (litems == NULL) {
return PS_MEM_FAIL;
}
memset(litems, 0, sizeof(psList_t));
while (listLen > 0) {
itemLen = 0;
tmp = list;
if (litems == NULL) {
litems = psMalloc(pool, sizeof(psList_t));
if (litems == NULL) {
psFreeList(start);
return PS_MEM_FAIL;
}
memset(litems, 0, sizeof(psList_t));
prev->next = litems;
}
while (*list != separator && *list != '\0') {
itemLen++;
listLen--;
list++;
}
litems->item = psMalloc(pool, itemLen + 1);
if (litems->item == NULL) {
psFreeList(start);
return PS_MEM_FAIL;
}
litems->len = itemLen;
memset(litems->item, 0x0, itemLen + 1);
memcpy(litems->item, tmp, itemLen);
list++;
listLen--;
prev = litems;
litems = litems->next;
}
*items = start;
return PS_SUCCESS;
}
示例3: getValidity
/*
Implementation specific date parser.
Does not actually verify the date
*/
int32 getValidity(psPool_t *pool, unsigned char **pp, int32 len,
char **notBefore, char **notAfter)
{
unsigned char *p = *pp, *end;
int32 seqLen, timeLen;
end = p + len;
if (len < 1 || *(p++) != (ASN_SEQUENCE | ASN_CONSTRUCTED) ||
asnParseLength(&p, len - 1, &seqLen) < 0 || (end - p) < seqLen) {
return -1;
}
/*
Have notBefore and notAfter times in UTCTime or GeneralizedTime formats
*/
if ((end - p) < 1 || ((*p != ASN_UTCTIME) && (*p != ASN_GENERALIZEDTIME))) {
return -1;
}
p++;
/*
Allocate them as null terminated strings
*/
if (asnParseLength(&p, seqLen, &timeLen) < 0 || (end - p) < timeLen) {
return -1;
}
*notBefore = psMalloc(pool, timeLen + 1);
if (*notBefore == NULL) {
return -8; /* SSL_MEM_ERROR */
}
memcpy(*notBefore, p, timeLen);
(*notBefore)[timeLen] = '\0';
p = p + timeLen;
if ((end - p) < 1 || ((*p != ASN_UTCTIME) && (*p != ASN_GENERALIZEDTIME))) {
return -1;
}
p++;
if (asnParseLength(&p, seqLen - timeLen, &timeLen) < 0 ||
(end - p) < timeLen) {
return -1;
}
*notAfter = psMalloc(pool, timeLen + 1);
if (*notAfter == NULL) {
return -8; /* SSL_MEM_ERROR */
}
memcpy(*notAfter, p, timeLen);
(*notAfter)[timeLen] = '\0';
p = p + timeLen;
*pp = p;
return 0;
}
示例4: getImplicitBitString
/*
Could be optional. If the tag doesn't contain the value from the left
of the IMPLICIT keyword we don't have a match and we don't incr the pointer.
*/
int32 getImplicitBitString(psPool_t *pool, unsigned char **pp, int32 len,
int32 impVal, unsigned char **bitString, int32 *bitLen)
{
unsigned char *p = *pp;
int32 ignore_bits;
if (len < 1) {
return -1;
}
/*
We don't treat this case as an error, because of the optional nature.
*/
if (*p != (ASN_CONTEXT_SPECIFIC | ASN_CONSTRUCTED | impVal)) {
return 0;
}
p++;
if (asnParseLength(&p, len, bitLen) < 0) {
return -1;
}
ignore_bits = *p++;
sslAssert(ignore_bits == 0);
*bitString = psMalloc(pool, *bitLen);
if (*bitString == NULL) {
return -8; /* SSL_MEM_ERROR */
}
memcpy(*bitString, p, *bitLen);
*pp = p + *bitLen;
return 0;
}
示例5: psGetFileBufFp
/**
Allocate a buffer and read in a file.
@note Caller must free 'buf' parameter on success.
Callers do not need to free buf on function failure.
Two variants: psGetFileBuf takes in a filename, psGetFileBufFp takes in
a pointer to an already opened FILE.
*/
int32 psGetFileBufFp(psPool_t *pool, FILE *fp, unsigned char **buf,
int32 *bufLen)
{
struct stat f_stat;
size_t tmp = 0;
int fno = fileno(fp);
if (fstat(fno, &f_stat) != 0)
{
fclose(fp);
psTraceIntCore("Unable to stat fp %d\n", fno);
return PS_PLATFORM_FAIL;
}
*buf = psMalloc(pool, (size_t) (f_stat.st_size + 1));
if (*buf == NULL)
{
fclose(fp);
return PS_MEM_FAIL;
}
memset(*buf, 0x0, (size_t) f_stat.st_size + 1);
while (((tmp = fread(*buf + *bufLen, sizeof(char), 512, fp)) > 0) &&
(*bufLen < f_stat.st_size))
{
*bufLen += (int32) tmp;
}
fclose(fp);
return PS_SUCCESS;
}
示例6: parseList
/*
* Strtok substitute
*/
static int32 parseList(psPool_t *pool, const char *list, const char *sep,
char **item)
{
int32 start, listLen;
char *tmp;
start = listLen = (int32)strlen(list) + 1;
if (start == 1) {
*item = NULL;
return 0;
}
tmp = *item = psMalloc(pool, listLen);
if (tmp == NULL) {
return -8; /* SSL_MEM_ERROR */
}
memset(*item, 0, listLen);
while (listLen > 0) {
if (*list == sep[0]) {
list++;
listLen--;
break;
}
if (*list == 0) {
break;
}
*tmp++ = *list++;
listLen--;
}
return start - listLen;
}
示例7: matrixRsaParsePubKey
/*
Binary to struct helper for RSA public keys.
*/
int32 matrixRsaParsePubKey(psPool_t *pool, unsigned char *keyBuf,
int32 keyBufLen, sslRsaKey_t **key)
{
unsigned char *p, *end;
int32 len;
p = keyBuf;
end = p + keyBufLen;
/*
Supporting both the PKCS#1 RSAPublicKey format and the
X.509 SubjectPublicKeyInfo format. If encoding doesn't start with
the SEQUENCE identifier for the SubjectPublicKeyInfo format, jump down
to the RSAPublicKey subset parser and try that
*/
if (getSequence(&p, (int32)(end - p), &len) == 0) {
if (getAlgorithmIdentifier(&p, (int32)(end - p), &len, 1) < 0) {
return -1;
}
}
/*
Now have the DER stream to extract from in asnp
*/
*key = psMalloc(pool, sizeof(sslRsaKey_t));
if (*key == NULL) {
return -8; /* SSL_MEM_ERROR */
}
memset(*key, 0x0, sizeof(sslRsaKey_t));
if (getPubKey(pool, &p, (int32)(end - p), *key) < 0) {
matrixRsaFreeKey(*key);
*key = NULL;
matrixStrDebugMsg("Unable to ASN parse public key\n", NULL);
return -1;
}
return 0;
}
示例8: matrixX509ParsePubKey
/*
In-memory version of matrixX509ReadPubKey.
This function was written strictly for clarity in the PeerSec crypto API
subset. It extracts only the public key from a certificate file for use
in the lower level encrypt/decrypt RSA routines.
*/
int32 matrixX509ParsePubKey(psPool_t *pool, unsigned char *certBuf,
int32 certLen, sslRsaKey_t **key)
{
sslRsaKey_t *lkey;
sslRsaCert_t *certStruct;
int32 err;
if (matrixX509ParseCert(pool, certBuf, certLen, &certStruct) < 0) {
matrixX509FreeCert(certStruct);
return -1;
}
lkey = *key = psMalloc(pool, sizeof(sslRsaKey_t));
memset(lkey, 0x0, sizeof(sslRsaKey_t));
if ((err = _mp_init_multi(pool, &lkey->e, &lkey->N, NULL,
NULL, NULL, NULL, NULL, NULL)) != MP_OKAY) {
matrixX509FreeCert(certStruct);
psFree(lkey);
return err;
}
mp_copy(&certStruct->publicKey.e, &lkey->e);
mp_copy(&certStruct->publicKey.N, &lkey->N);
mp_shrink(&lkey->e);
mp_shrink(&lkey->N);
lkey->size = certStruct->publicKey.size;
matrixX509FreeCert(certStruct);
return 0;
}
示例9: psGetFileBin
/*
Return the file contents given a file name in a single allocated buffer.
Not a good routine to use generally with the fixed mem stuff. Not
actually doing a 'binary' file read. Only using the 'r' attribute since
all the cert and key files are text.
*/
int32 psGetFileBin(psPool_t *pool, const char *fileName, unsigned char **bin,
int32 *binLen)
{
FILE *fp;
struct stat fstat;
size_t tmp = 0;
*binLen = 0;
*bin = NULL;
if (fileName == NULL) {
return -1;
}
if ((stat(fileName, &fstat) != 0) || (fp = fopen(fileName, "r")) == NULL) {
return -7; /* FILE_NOT_FOUND */
}
*bin = psMalloc(pool, fstat.st_size + 1);
if (*bin == NULL) {
return -8; /* SSL_MEM_ERROR */
}
memset(*bin, 0x0, fstat.st_size + 1);
while (((tmp = fread(*bin + *binLen, sizeof(char), 512, fp)) > 0) &&
(*binLen < fstat.st_size)) {
*binLen += (int32)tmp;
}
fclose(fp);
return 0;
}
示例10: getSignature
/*
Currently just returning the raw BIT STRING and size in bytes
*/
int32 getSignature(psPool_t *pool, unsigned char **pp, int32 len,
unsigned char **sig, int32 *sigLen)
{
unsigned char *p = *pp, *end;
int32 ignore_bits, llen;
end = p + len;
if (len < 1 || (*(p++) != ASN_BIT_STRING) ||
asnParseLength(&p, len - 1, &llen) < 0 || (end - p) < llen) {
return -1;
}
ignore_bits = *p++;
/*
We assume this is always 0.
*/
sslAssert(ignore_bits == 0);
/*
Length included the ignore_bits byte
*/
*sigLen = llen - 1;
*sig = psMalloc(pool, *sigLen);
if (*sig == NULL) {
return -8; /* SSL_MEM_ERROR */
}
memcpy(*sig, p, *sigLen);
*pp = p + *sigLen;
return 0;
}
示例11: getSerialNum
/*
Although a certificate serial number is encoded as an integer type, that
doesn't prevent it from being abused as containing a variable length
binary value. Get it here.
*/
int32 getSerialNum(psPool_t *pool, unsigned char **pp, int32 len,
unsigned char **sn, int32 *snLen)
{
unsigned char *p = *pp;
int32 vlen;
if ((*p != (ASN_CONTEXT_SPECIFIC | ASN_PRIMITIVE | 2)) &&
(*p != ASN_INTEGER)) {
matrixStrDebugMsg("ASN getSerialNumber failed\n", NULL);
return -1;
}
p++;
if (len < 1 || asnParseLength(&p, len - 1, &vlen) < 0) {
matrixStrDebugMsg("ASN getSerialNumber failed\n", NULL);
return -1;
}
*snLen = vlen;
*sn = psMalloc(pool, vlen);
if (*sn == NULL) {
return -8; /* SSL_MEM_ERROR */
}
memcpy(*sn, p, vlen);
p += vlen;
*pp = p;
return 0;
}
示例12: psGetFileBuf
/*
Memory info:
Caller must free 'buf' parameter on success
Callers do not need to free buf on function failure
*/
int32 psGetFileBuf(psPool_t *pool, const char *fileName, unsigned char **buf,
int32 *bufLen)
{
FILE *fp;
struct stat fstat;
size_t tmp = 0;
*bufLen = 0;
*buf = NULL;
if (fileName == NULL) {
return PS_ARG_FAIL;
}
if ((stat(fileName, &fstat) != 0) || (fp = fopen(fileName, "r")) == NULL) {
psTraceStrCore("Unable to open %s\n", (char*)fileName);
return PS_PLATFORM_FAIL;
}
*buf = psMalloc(pool, (size_t)(fstat.st_size + 1));
if (*buf == NULL) {
return PS_MEM_FAIL;
}
memset(*buf, 0x0, (size_t)fstat.st_size + 1);
while (((tmp = fread(*buf + *bufLen, sizeof(char), 512, fp)) > 0) &&
(*bufLen < fstat.st_size)) {
*bufLen += (int32)tmp;
}
fclose(fp);
return PS_SUCCESS;
}
示例13: readCertChain
/*
Allows for semi-colon delimited list of certificates for cert chaining.
Also allows multiple certificiates in a single file.
HOWERVER, in both cases the first in the list must be the identifying
cert of the application. Each subsequent cert is the parent of the previous
*/
int32 readCertChain(psPool_t *pool, const char *certFiles,
sslLocalCert_t *lkeys)
{
sslLocalCert_t *currCert;
unsigned char *certBin, *tmp;
sslChainLen_t chain;
int32 certLen, i;
if (certFiles == NULL) {
return 0;
}
if (matrixX509ReadCert(pool, certFiles, &certBin, &certLen, &chain) < 0) {
matrixStrDebugMsg("Error reading cert file %s\n", (char*)certFiles);
return -1;
}
/*
The first cert is allocated in the keys struct. All others in
linked list are allocated here.
*/
i = 0;
tmp = certBin;
while (chain[i] != 0) {
if (i == 0) {
currCert = lkeys;
} else {
currCert->next = psMalloc(pool, sizeof(sslLocalCert_t));
if (currCert->next == NULL) {
psFree(tmp);
return -8; /* SSL_MEM_ERROR */
}
memset(currCert->next, 0x0, sizeof(sslLocalCert_t));
currCert = currCert->next;
}
currCert->certBin = psMalloc(pool, chain[i]);
memcpy(currCert->certBin, certBin, chain[i]);
currCert->certLen = chain[i];
certBin += chain[i]; certLen -= chain[i];
i++;
}
psFree(tmp);
sslAssert(certLen == 0);
return 0;
}
示例14: psNewPubKey
/*
Allocate a new psPubKey_t and memset empty
*/
psPubKey_t * psNewPubKey(psPool_t *pool) {
psPubKey_t *ret;
ret = psMalloc(pool, sizeof(psPubKey_t));
if (ret == NULL) {
psError("Memory allocation error in psNewPubKey\n");
return NULL;
}
memset(ret, 0x0, sizeof(psPubKey_t));
ret->key = psMalloc(pool, sizeof(pubKeyUnion_t));
if (ret->key == NULL) {
psFree(ret);
psError("Memory allocation error in psNewPubKey\n");
return NULL;
}
memset(ret->key, 0x0, sizeof(pubKeyUnion_t));
return ret;
}
示例15: matrixSslNewSessionId
/* SessionID management functions for clients that wish to perform
session resumption. This structure handles both the traditional resumption
mechanism and the server-stateless session ticket mechanism
*/
int32 matrixSslNewSessionId(sslSessionId_t **sess)
{
sslSessionId_t *ses;
if ((ses = psMalloc(MATRIX_NO_POOL, sizeof(sslSessionId_t))) == NULL) {
return PS_MEM_FAIL;
}
memset(ses, 0x0, sizeof(sslSessionId_t));
*sess = ses;
return PS_SUCCESS;
}