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