git://git.exim.org
/
exim.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Bugzilla #1097: PDKIM: Update embedded PolarSSL code to 0.14.2, thanks to Andreas...
[exim.git]
/
src
/
src
/
pdkim
/
bignum.c
diff --git
a/src/src/pdkim/bignum.c
b/src/src/pdkim/bignum.c
index d7b67a50999c420b3f5a7f8c7b6836ddcb00641e..fd3b66a447f31254e71f6408229a63ca79ef02ef 100644
(file)
--- a/
src/src/pdkim/bignum.c
+++ b/
src/src/pdkim/bignum.c
@@
-1,10
+1,12
@@
/*
* Multi-precision integer library
*
/*
* Multi-precision integer library
*
- * Copyright (C) 2006-2009, Paul Bakker <polarssl_maintainer at polarssl.org>
- * All rights reserved.
+ * Copyright (C) 2006-2010, Brainspark B.V.
+ *
+ * This file is part of PolarSSL (http://www.polarssl.org)
+ * Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org>
*
*
- *
Joined copyright on original XySSL code with: Christophe Devine
+ *
All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@
-30,7
+32,6
@@
/* $Cambridge: exim/src/src/pdkim/bignum.c,v 1.3 2009/12/07 13:05:07 tom Exp $ */
/* $Cambridge: exim/src/src/pdkim/bignum.c,v 1.3 2009/12/07 13:05:07 tom Exp $ */
-
#include "bignum.h"
#include "bn_mul.h"
#include "bignum.h"
#include "bn_mul.h"
@@
-127,7
+128,7
@@
int mpi_grow( mpi *X, int nblimbs )
/*
* Copy the contents of Y into X
*/
/*
* Copy the contents of Y into X
*/
-int mpi_copy( mpi *X, mpi *Y )
+int mpi_copy( mpi *X,
const
mpi *Y )
{
int ret, i;
{
int ret, i;
@@
-184,7
+185,7
@@
cleanup:
/*
* Return the number of least significant bits
*/
/*
* Return the number of least significant bits
*/
-int mpi_lsb( mpi *X )
+int mpi_lsb(
const
mpi *X )
{
int i, j, count = 0;
{
int i, j, count = 0;
@@
-199,7
+200,7
@@
int mpi_lsb( mpi *X )
/*
* Return the number of most significant bits
*/
/*
* Return the number of most significant bits
*/
-int mpi_msb( mpi *X )
+int mpi_msb(
const
mpi *X )
{
int i, j;
{
int i, j;
@@
-217,7
+218,7
@@
int mpi_msb( mpi *X )
/*
* Return the total size in bytes
*/
/*
* Return the total size in bytes
*/
-int mpi_size( mpi *X )
+int mpi_size(
const
mpi *X )
{
return( ( mpi_msb( X ) + 7 ) >> 3 );
}
{
return( ( mpi_msb( X ) + 7 ) >> 3 );
}
@@
-242,9
+243,9
@@
static int mpi_get_digit( t_int *d, int radix, char c )
/*
* Import from an ASCII string
*/
/*
* Import from an ASCII string
*/
-int mpi_read_string( mpi *X, int radix, char *s )
+int mpi_read_string( mpi *X, int radix, c
onst c
har *s )
{
{
- int ret, i, j, n;
+ int ret, i, j, n
, slen
;
t_int d;
mpi T;
t_int d;
mpi T;
@@
-253,14
+254,16
@@
int mpi_read_string( mpi *X, int radix, char *s )
mpi_init( &T, NULL );
mpi_init( &T, NULL );
+ slen = strlen( s );
+
if( radix == 16 )
{
if( radix == 16 )
{
- n = BITS_TO_LIMBS( s
trlen( s )
<< 2 );
+ n = BITS_TO_LIMBS( s
len
<< 2 );
MPI_CHK( mpi_grow( X, n ) );
MPI_CHK( mpi_lset( X, 0 ) );
MPI_CHK( mpi_grow( X, n ) );
MPI_CHK( mpi_lset( X, 0 ) );
- for( i = s
trlen( s )
- 1, j = 0; i >= 0; i--, j++ )
+ for( i = s
len
- 1, j = 0; i >= 0; i--, j++ )
{
if( i == 0 && s[i] == '-' )
{
{
if( i == 0 && s[i] == '-' )
{
@@
-276,7
+279,7
@@
int mpi_read_string( mpi *X, int radix, char *s )
{
MPI_CHK( mpi_lset( X, 0 ) );
{
MPI_CHK( mpi_lset( X, 0 ) );
- for( i = 0; i <
(int) strlen( s )
; i++ )
+ for( i = 0; i <
slen
; i++ )
{
if( i == 0 && s[i] == '-' )
{
{
if( i == 0 && s[i] == '-' )
{
@@
-335,7
+338,7
@@
cleanup:
/*
* Export into an ASCII string
*/
/*
* Export into an ASCII string
*/
-int mpi_write_string( mpi *X, int radix, char *s, int *slen )
+int mpi_write_string(
const
mpi *X, int radix, char *s, int *slen )
{
int ret = 0, n;
char *p;
{
int ret = 0, n;
char *p;
@@
-428,12
+431,12
@@
int mpi_read_file( mpi *X, int radix, FILE *fin )
/*
* Write X into an opened file (or stdout if fout == NULL)
*/
/*
* Write X into an opened file (or stdout if fout == NULL)
*/
-int mpi_write_file( const char *p, mpi *X, int radix, FILE *fout )
+int mpi_write_file( const char *p,
const
mpi *X, int radix, FILE *fout )
{
int n, ret;
size_t slen;
size_t plen;
{
int n, ret;
size_t slen;
size_t plen;
- char s[
1024
];
+ char s[
2048
];
n = sizeof( s );
memset( s, 0, n );
n = sizeof( s );
memset( s, 0, n );
@@
-465,7
+468,7
@@
cleanup:
/*
* Import X from unsigned binary data, big endian
*/
/*
* Import X from unsigned binary data, big endian
*/
-int mpi_read_binary( mpi *X, unsigned char *buf, int buflen )
+int mpi_read_binary( mpi *X,
const
unsigned char *buf, int buflen )
{
int ret, i, j, n;
{
int ret, i, j, n;
@@
-487,7
+490,7
@@
cleanup:
/*
* Export X into unsigned binary data, big endian
*/
/*
* Export X into unsigned binary data, big endian
*/
-int mpi_write_binary( mpi *X, unsigned char *buf, int buflen )
+int mpi_write_binary(
const
mpi *X, unsigned char *buf, int buflen )
{
int i, j, n;
{
int i, j, n;
@@
-596,7
+599,7
@@
int mpi_shift_r( mpi *X, int count )
/*
* Compare unsigned values
*/
/*
* Compare unsigned values
*/
-int mpi_cmp_abs(
mpi *X,
mpi *Y )
+int mpi_cmp_abs(
const mpi *X, const
mpi *Y )
{
int i, j;
{
int i, j;
@@
-626,7
+629,7
@@
int mpi_cmp_abs( mpi *X, mpi *Y )
/*
* Compare signed values
*/
/*
* Compare signed values
*/
-int mpi_cmp_mpi(
mpi *X,
mpi *Y )
+int mpi_cmp_mpi(
const mpi *X, const
mpi *Y )
{
int i, j;
{
int i, j;
@@
-659,7
+662,7
@@
int mpi_cmp_mpi( mpi *X, mpi *Y )
/*
* Compare signed values
*/
/*
* Compare signed values
*/
-int mpi_cmp_int( mpi *X, int z )
+int mpi_cmp_int(
const
mpi *X, int z )
{
mpi Y;
t_int p[1];
{
mpi Y;
t_int p[1];
@@
-675,14
+678,14
@@
int mpi_cmp_int( mpi *X, int z )
/*
* Unsigned addition: X = |A| + |B| (HAC 14.7)
*/
/*
* Unsigned addition: X = |A| + |B| (HAC 14.7)
*/
-int mpi_add_abs( mpi *X,
mpi *A,
mpi *B )
+int mpi_add_abs( mpi *X,
const mpi *A, const
mpi *B )
{
int ret, i, j;
t_int *o, *p, c;
if( X == B )
{
{
int ret, i, j;
t_int *o, *p, c;
if( X == B )
{
- mpi *T = A; A = X; B = T;
+
const
mpi *T = A; A = X; B = T;
}
if( X != A )
}
if( X != A )
@@
-747,7
+750,7
@@
static void mpi_sub_hlp( int n, t_int *s, t_int *d )
/*
* Unsigned substraction: X = |A| - |B| (HAC 14.9)
*/
/*
* Unsigned substraction: X = |A| - |B| (HAC 14.9)
*/
-int mpi_sub_abs( mpi *X,
mpi *A,
mpi *B )
+int mpi_sub_abs( mpi *X,
const mpi *A, const
mpi *B )
{
mpi TB;
int ret, n;
{
mpi TB;
int ret, n;
@@
-789,7
+792,7
@@
cleanup:
/*
* Signed addition: X = A + B
*/
/*
* Signed addition: X = A + B
*/
-int mpi_add_mpi( mpi *X,
mpi *A,
mpi *B )
+int mpi_add_mpi( mpi *X,
const mpi *A, const
mpi *B )
{
int ret, s = A->s;
{
int ret, s = A->s;
@@
-820,7
+823,7
@@
cleanup:
/*
* Signed substraction: X = A - B
*/
/*
* Signed substraction: X = A - B
*/
-int mpi_sub_mpi( mpi *X,
mpi *A,
mpi *B )
+int mpi_sub_mpi( mpi *X,
const mpi *A, const
mpi *B )
{
int ret, s = A->s;
{
int ret, s = A->s;
@@
-851,7
+854,7
@@
cleanup:
/*
* Signed addition: X = A + b
*/
/*
* Signed addition: X = A + b
*/
-int mpi_add_int( mpi *X, mpi *A, int b )
+int mpi_add_int( mpi *X,
const
mpi *A, int b )
{
mpi _B;
t_int p[1];
{
mpi _B;
t_int p[1];
@@
-867,7
+870,7
@@
int mpi_add_int( mpi *X, mpi *A, int b )
/*
* Signed substraction: X = A - b
*/
/*
* Signed substraction: X = A - b
*/
-int mpi_sub_int( mpi *X, mpi *A, int b )
+int mpi_sub_int( mpi *X,
const
mpi *A, int b )
{
mpi _B;
t_int p[1];
{
mpi _B;
t_int p[1];
@@
-947,7
+950,7
@@
static void mpi_mul_hlp( int i, t_int *s, t_int *d, t_int b )
/*
* Baseline multiplication: X = A * B (HAC 14.12)
*/
/*
* Baseline multiplication: X = A * B (HAC 14.12)
*/
-int mpi_mul_mpi( mpi *X,
mpi *A,
mpi *B )
+int mpi_mul_mpi( mpi *X,
const mpi *A, const
mpi *B )
{
int ret, i, j;
mpi TA, TB;
{
int ret, i, j;
mpi TA, TB;
@@
-983,7
+986,7
@@
cleanup:
/*
* Baseline multiplication: X = A * b
*/
/*
* Baseline multiplication: X = A * b
*/
-int mpi_mul_int( mpi *X, mpi *A, t_int b )
+int mpi_mul_int( mpi *X,
const
mpi *A, t_int b )
{
mpi _B;
t_int p[1];
{
mpi _B;
t_int p[1];
@@
-999,7
+1002,7
@@
int mpi_mul_int( mpi *X, mpi *A, t_int b )
/*
* Division by mpi: A = Q * B + R (HAC 14.20)
*/
/*
* Division by mpi: A = Q * B + R (HAC 14.20)
*/
-int mpi_div_mpi( mpi *Q, mpi *R,
mpi *A,
mpi *B )
+int mpi_div_mpi( mpi *Q, mpi *R,
const mpi *A, const
mpi *B )
{
int ret, i, n, t, k;
mpi X, Y, Z, T1, T2;
{
int ret, i, n, t, k;
mpi X, Y, Z, T1, T2;
@@
-1164,7
+1167,7
@@
cleanup:
* 1 if memory allocation failed
* POLARSSL_ERR_MPI_DIVISION_BY_ZERO if b == 0
*/
* 1 if memory allocation failed
* POLARSSL_ERR_MPI_DIVISION_BY_ZERO if b == 0
*/
-int mpi_div_int( mpi *Q, mpi *R, mpi *A, int b )
+int mpi_div_int( mpi *Q, mpi *R,
const
mpi *A, int b )
{
mpi _B;
t_int p[1];
{
mpi _B;
t_int p[1];
@@
-1180,7
+1183,7
@@
int mpi_div_int( mpi *Q, mpi *R, mpi *A, int b )
/*
* Modulo: R = A mod B
*/
/*
* Modulo: R = A mod B
*/
-int mpi_mod_mpi( mpi *R,
mpi *A,
mpi *B )
+int mpi_mod_mpi( mpi *R,
const mpi *A, const
mpi *B )
{
int ret;
{
int ret;
@@
-1203,7
+1206,7
@@
cleanup:
/*
* Modulo: r = A mod b
*/
/*
* Modulo: r = A mod b
*/
-int mpi_mod_int( t_int *r, mpi *A, int b )
+int mpi_mod_int( t_int *r,
const
mpi *A, int b )
{
int i;
t_int x, y, z;
{
int i;
t_int x, y, z;
@@
-1260,7
+1263,7
@@
int mpi_mod_int( t_int *r, mpi *A, int b )
/*
* Fast Montgomery initialization (thanks to Tom St Denis)
*/
/*
* Fast Montgomery initialization (thanks to Tom St Denis)
*/
-static void mpi_montg_init( t_int *mm, mpi *N )
+static void mpi_montg_init( t_int *mm,
const
mpi *N )
{
t_int x, m0 = N->p[0];
{
t_int x, m0 = N->p[0];
@@
-1278,7
+1281,7
@@
static void mpi_montg_init( t_int *mm, mpi *N )
/*
* Montgomery multiplication: A = A * B * R^-1 mod N (HAC 14.36)
*/
/*
* Montgomery multiplication: A = A * B * R^-1 mod N (HAC 14.36)
*/
-static void mpi_montmul( mpi *A,
mpi *B, mpi *N, t_int mm,
mpi *T )
+static void mpi_montmul( mpi *A,
const mpi *B, const mpi *N, t_int mm, const
mpi *T )
{
int i, n, m;
t_int u0, u1, *d;
{
int i, n, m;
t_int u0, u1, *d;
@@
-1315,7
+1318,7
@@
static void mpi_montmul( mpi *A, mpi *B, mpi *N, t_int mm, mpi *T )
/*
* Montgomery reduction: A = A * R^-1 mod N
*/
/*
* Montgomery reduction: A = A * R^-1 mod N
*/
-static void mpi_montred( mpi *A,
mpi *N, t_int mm,
mpi *T )
+static void mpi_montred( mpi *A,
const mpi *N, t_int mm, const
mpi *T )
{
t_int z = 1;
mpi U;
{
t_int z = 1;
mpi U;
@@
-1329,7
+1332,7
@@
static void mpi_montred( mpi *A, mpi *N, t_int mm, mpi *T )
/*
* Sliding-window exponentiation: X = A^E mod N (HAC 14.85)
*/
/*
* Sliding-window exponentiation: X = A^E mod N (HAC 14.85)
*/
-int mpi_exp_mod( mpi *X,
mpi *A, mpi *E,
mpi *N, mpi *_RR )
+int mpi_exp_mod( mpi *X,
const mpi *A, const mpi *E, const
mpi *N, mpi *_RR )
{
int ret, i, j, wsize, wbits;
int bufsize, nblimbs, nbits;
{
int ret, i, j, wsize, wbits;
int bufsize, nblimbs, nbits;
@@
-1506,7
+1509,7
@@
cleanup:
/*
* Greatest common divisor: G = gcd(A, B) (HAC 14.54)
*/
/*
* Greatest common divisor: G = gcd(A, B) (HAC 14.54)
*/
-int mpi_gcd( mpi *G,
mpi *A,
mpi *B )
+int mpi_gcd( mpi *G,
const mpi *A, const
mpi *B )
{
int ret, lz, lzt;
mpi TG, TA, TB;
{
int ret, lz, lzt;
mpi TG, TA, TB;
@@
-1559,7
+1562,7
@@
cleanup:
/*
* Modular inverse: X = A^-1 mod N (HAC 14.61 / 14.64)
*/
/*
* Modular inverse: X = A^-1 mod N (HAC 14.61 / 14.64)
*/
-int mpi_inv_mod( mpi *X,
mpi *A,
mpi *N )
+int mpi_inv_mod( mpi *X,
const mpi *A, const
mpi *N )
{
int ret;
mpi G, TA, TU, U1, U2, TB, TV, V1, V2;
{
int ret;
mpi G, TA, TU, U1, U2, TB, TV, V1, V2;
@@
-1717,8
+1720,8
@@
int mpi_is_prime( mpi *X, int (*f_rng)(void *), void *p_rng )
* W = |X| - 1
* R = W >> lsb( W )
*/
* W = |X| - 1
* R = W >> lsb( W )
*/
- s = mpi_lsb( &W );
MPI_CHK( mpi_sub_int( &W, X, 1 ) );
MPI_CHK( mpi_sub_int( &W, X, 1 ) );
+ s = mpi_lsb( &W );
MPI_CHK( mpi_copy( &R, &W ) );
MPI_CHK( mpi_shift_r( &R, s ) );
MPI_CHK( mpi_copy( &R, &W ) );
MPI_CHK( mpi_shift_r( &R, s ) );