1193326Sed/* $OpenBSD: mem.c,v 1.5 2009/10/27 23:59:37 deraadt Exp $ */ 2193326Sed 3193326Sed/* 4193326Sed * Copyright (c) 2003, Otto Moerbeek <otto@drijf.net> 5193326Sed * 6193326Sed * Permission to use, copy, modify, and distribute this software for any 7193326Sed * purpose with or without fee is hereby granted, provided that the above 8193326Sed * copyright notice and this permission notice appear in all copies. 9193326Sed * 10193326Sed * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11193326Sed * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12193326Sed * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13193326Sed * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14252723Sdim * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15221345Sdim * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16252723Sdim * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17199482Srdivacky */ 18193326Sed 19193326Sed#include <sys/cdefs.h> 20226890Sdim__FBSDID("$FreeBSD$"); 21193326Sed 22193326Sed#include <openssl/err.h> 23193326Sed 24221345Sdim#include <err.h> 25221345Sdim#include <stdlib.h> 26193326Sed#include <string.h> 27245431Sdim 28245431Sdim#include "extern.h" 29207619Srdivacky 30207619Srdivackystruct number * 31235633Sdimnew_number(void) 32193326Sed{ 33207619Srdivacky struct number *n; 34193326Sed 35218893Sdim n = bmalloc(sizeof(*n)); 36193326Sed n->scale = 0; 37193326Sed n->number = BN_new(); 38193326Sed if (n->number == NULL) 39235633Sdim err(1, NULL); 40252723Sdim return (n); 41226890Sdim} 42226890Sdim 43193326Sedvoid 44193326Sedfree_number(struct number *n) 45193326Sed{ 46193326Sed 47193326Sed BN_free(n->number); 48193326Sed free(n); 49210299Sed} 50210299Sed 51226890Sdimstruct number * 52245431Sdimdup_number(const struct number *a) 53193326Sed{ 54193326Sed struct number *n; 55193326Sed 56193326Sed n = bmalloc(sizeof(*n)); 57193326Sed n->scale = a->scale; 58193326Sed n->number = BN_dup(a->number); 59198398Srdivacky bn_checkp(n->number); 60198092Srdivacky return (n); 61198092Srdivacky} 62195341Sed 63199990Srdivackyvoid * 64245431Sdimbmalloc(size_t sz) 65235633Sdim{ 66207619Srdivacky void *p; 67226890Sdim 68226890Sdim p = malloc(sz); 69226890Sdim if (p == NULL) 70193326Sed err(1, NULL); 71193326Sed return (p); 72193326Sed} 73193326Sed 74199482Srdivackyvoid * 75193326Sedbrealloc(void *p, size_t sz) 76218893Sdim{ 77226890Sdim void *q; 78226890Sdim 79208600Srdivacky q = realloc(p, sz); 80210299Sed if (q == NULL) 81210299Sed err(1, NULL); 82210299Sed return (q); 83212904Sdim} 84235633Sdim 85235633Sdimchar * 86235633Sdimbstrdup(const char *p) 87212904Sdim{ 88252723Sdim char *q; 89221345Sdim 90221345Sdim q = strdup(p); 91221345Sdim if (q == NULL) 92221345Sdim err(1, NULL); 93221345Sdim return (q); 94221345Sdim} 95221345Sdim 96193326Sedvoid 97193326Sedbn_check(int x) \ 98193326Sed{ 99193326Sed 100193326Sed if (x == 0) 101193326Sed err(1, "big number failure %lx", ERR_get_error()); 102193326Sed} 103193326Sed 104193326Sedvoid 105226890Sdimbn_checkp(const void *p) \ 106193326Sed{ 107193326Sed 108193326Sed if (p == NULL) 109193326Sed err(1, "allocation failure %lx", ERR_get_error()); 110193326Sed} 111193326Sed