pqgutil.c
来自「支持SSL v2/v3, TLS, PKCS #5, PKCS #7, PKCS」· C语言 代码 · 共 268 行
C
268 行
/* * The contents of this file are subject to the Mozilla Public * License Version 1.1 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing * rights and limitations under the License. * * The Original Code is the Netscape security libraries. * * The Initial Developer of the Original Code is Netscape * Communications Corporation. Portions created by Netscape are * Copyright (C) 1994-2000 Netscape Communications Corporation. All * Rights Reserved. * * Contributor(s): * * Alternatively, the contents of this file may be used under the * terms of the GNU General Public License Version 2 or later (the * "GPL"), in which case the provisions of the GPL are applicable * instead of those above. If you wish to allow use of your * version of this file only under the terms of the GPL and not to * allow others to use your version of this file under the MPL, * indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by * the GPL. If you do not delete the provisions above, a recipient * may use your version of this file under either the MPL or the * GPL. */#include "pqgutil.h"#include "prerror.h"#include "secitem.h"#define PQG_DEFAULT_CHUNKSIZE 2048 /* bytes *//************************************************************************** * Return a pointer to a new PQGParams struct that is a duplicate of * * the one passed as an argument. * * Return NULL on failure, or if NULL was passed in. * * * **************************************************************************/PQGParams *PQG_DupParams(const PQGParams *src){ PRArenaPool *arena; PQGParams *dest; SECStatus status; if (src == NULL) { PORT_SetError(PR_INVALID_ARGUMENT_ERROR); return NULL; } arena = PORT_NewArena(PQG_DEFAULT_CHUNKSIZE); if (arena == NULL) goto loser; dest = (PQGParams*)PORT_ArenaZAlloc(arena, sizeof(PQGParams)); if (dest == NULL) goto loser; dest->arena = arena; status = SECITEM_CopyItem(arena, &dest->prime, &src->prime); if (status != SECSuccess) goto loser; status = SECITEM_CopyItem(arena, &dest->subPrime, &src->subPrime); if (status != SECSuccess) goto loser; status = SECITEM_CopyItem(arena, &dest->base, &src->base); if (status != SECSuccess) goto loser; return dest;loser: if (arena != NULL) PORT_FreeArena(arena, PR_FALSE); return NULL;}/************************************************************************** * Return a pointer to a new PQGParams struct that is constructed from * * copies of the arguments passed in. * * Return NULL on failure. * **************************************************************************/PQGParams *PQG_NewParams(const SECItem * prime, const SECItem * subPrime, const SECItem * base){ PQGParams * dest; PQGParams src; src.arena = NULL; src.prime = *prime; src.subPrime = *subPrime; src.base = *base; dest = PQG_DupParams(&src); return dest;}/************************************************************************** * Fills in caller's "prime" SECItem with the prime value in params. * Contents can be freed by calling SECITEM_FreeItem(prime, PR_FALSE); **************************************************************************/SECStatusPQG_GetPrimeFromParams(const PQGParams *params, SECItem * prime){ return SECITEM_CopyItem(NULL, prime, ¶ms->prime);}/************************************************************************** * Fills in caller's "subPrime" SECItem with the prime value in params. * Contents can be freed by calling SECITEM_FreeItem(subPrime, PR_FALSE); **************************************************************************/SECStatusPQG_GetSubPrimeFromParams(const PQGParams *params, SECItem * subPrime){ return SECITEM_CopyItem(NULL, subPrime, ¶ms->subPrime);}/************************************************************************** * Fills in caller's "base" SECItem with the base value in params. * Contents can be freed by calling SECITEM_FreeItem(base, PR_FALSE); **************************************************************************/SECStatusPQG_GetBaseFromParams(const PQGParams *params, SECItem * base){ return SECITEM_CopyItem(NULL, base, ¶ms->base);}/************************************************************************** * Free the PQGParams struct and the things it points to. * **************************************************************************/voidPQG_DestroyParams(PQGParams *params){ if (params == NULL) return; if (params->arena != NULL) { PORT_FreeArena(params->arena, PR_FALSE); /* don't zero it */ } else { SECITEM_FreeItem(¶ms->prime, PR_FALSE); /* don't free prime */ SECITEM_FreeItem(¶ms->subPrime, PR_FALSE); /* don't free subPrime */ SECITEM_FreeItem(¶ms->base, PR_FALSE); /* don't free base */ PORT_Free(params); }}/************************************************************************** * Return a pointer to a new PQGVerify struct that is a duplicate of * * the one passed as an argument. * * Return NULL on failure, or if NULL was passed in. * **************************************************************************/PQGVerify *PQG_DupVerify(const PQGVerify *src){ PRArenaPool *arena; PQGVerify * dest; SECStatus status; if (src == NULL) { PORT_SetError(PR_INVALID_ARGUMENT_ERROR); return NULL; } arena = PORT_NewArena(PQG_DEFAULT_CHUNKSIZE); if (arena == NULL) goto loser; dest = (PQGVerify*)PORT_ArenaZAlloc(arena, sizeof(PQGVerify)); if (dest == NULL) goto loser; dest->arena = arena; dest->counter = src->counter; status = SECITEM_CopyItem(arena, &dest->seed, &src->seed); if (status != SECSuccess) goto loser; status = SECITEM_CopyItem(arena, &dest->h, &src->h); if (status != SECSuccess) goto loser; return dest;loser: if (arena != NULL) PORT_FreeArena(arena, PR_FALSE); return NULL;}/************************************************************************** * Return a pointer to a new PQGVerify struct that is constructed from * * copies of the arguments passed in. * * Return NULL on failure. * **************************************************************************/PQGVerify *PQG_NewVerify(unsigned int counter, const SECItem * seed, const SECItem * h){ PQGVerify * dest; PQGVerify src; src.arena = NULL; src.counter = counter; src.seed = *seed; src.h = *h; dest = PQG_DupVerify(&src); return dest;}/************************************************************************** * Returns the "counter" value from the PQGVerify. **************************************************************************/unsigned intPQG_GetCounterFromVerify(const PQGVerify *verify){ return verify->counter;}/************************************************************************** * Fills in caller's "seed" SECItem with the seed value in verify. * Contents can be freed by calling SECITEM_FreeItem(seed, PR_FALSE); **************************************************************************/SECStatusPQG_GetSeedFromVerify(const PQGVerify *verify, SECItem * seed){ return SECITEM_CopyItem(NULL, seed, &verify->seed);}/************************************************************************** * Fills in caller's "h" SECItem with the h value in verify. * Contents can be freed by calling SECITEM_FreeItem(h, PR_FALSE); **************************************************************************/SECStatusPQG_GetHFromVerify(const PQGVerify *verify, SECItem * h){ return SECITEM_CopyItem(NULL, h, &verify->h);}/************************************************************************** * Free the PQGVerify struct and the things it points to. * **************************************************************************/voidPQG_DestroyVerify(PQGVerify *vfy){ if (vfy == NULL) return; if (vfy->arena != NULL) { PORT_FreeArena(vfy->arena, PR_FALSE); /* don't zero it */ } else { SECITEM_FreeItem(&vfy->seed, PR_FALSE); /* don't free seed */ SECITEM_FreeItem(&vfy->h, PR_FALSE); /* don't free h */ PORT_Free(vfy); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?