OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libgo/] [go/] [crypto/] [dsa/] [dsa_test.go] - Blame information for rev 747

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 747 jeremybenn
// Copyright 2011 The Go Authors. All rights reserved.
2
// Use of this source code is governed by a BSD-style
3
// license that can be found in the LICENSE file.
4
 
5
package dsa
6
 
7
import (
8
        "crypto/rand"
9
        "math/big"
10
        "testing"
11
)
12
 
13
func testSignAndVerify(t *testing.T, i int, priv *PrivateKey) {
14
        hashed := []byte("testing")
15
        r, s, err := Sign(rand.Reader, priv, hashed)
16
        if err != nil {
17
                t.Errorf("%d: error signing: %s", i, err)
18
                return
19
        }
20
 
21
        if !Verify(&priv.PublicKey, hashed, r, s) {
22
                t.Errorf("%d: Verify failed", i)
23
        }
24
}
25
 
26
func testParameterGeneration(t *testing.T, sizes ParameterSizes, L, N int) {
27
        var priv PrivateKey
28
        params := &priv.Parameters
29
 
30
        err := GenerateParameters(params, rand.Reader, sizes)
31
        if err != nil {
32
                t.Errorf("%d: %s", int(sizes), err)
33
                return
34
        }
35
 
36
        if params.P.BitLen() != L {
37
                t.Errorf("%d: params.BitLen got:%d want:%d", int(sizes), params.P.BitLen(), L)
38
        }
39
 
40
        if params.Q.BitLen() != N {
41
                t.Errorf("%d: q.BitLen got:%d want:%d", int(sizes), params.Q.BitLen(), L)
42
        }
43
 
44
        one := new(big.Int)
45
        one.SetInt64(1)
46
        pm1 := new(big.Int).Sub(params.P, one)
47
        quo, rem := new(big.Int).DivMod(pm1, params.Q, new(big.Int))
48
        if rem.Sign() != 0 {
49
                t.Errorf("%d: p-1 mod q != 0", int(sizes))
50
        }
51
        x := new(big.Int).Exp(params.G, quo, params.P)
52
        if x.Cmp(one) == 0 {
53
                t.Errorf("%d: invalid generator", int(sizes))
54
        }
55
 
56
        err = GenerateKey(&priv, rand.Reader)
57
        if err != nil {
58
                t.Errorf("error generating key: %s", err)
59
                return
60
        }
61
 
62
        testSignAndVerify(t, int(sizes), &priv)
63
}
64
 
65
func TestParameterGeneration(t *testing.T) {
66
        // This test is too slow to run all the time.
67
        return
68
 
69
        testParameterGeneration(t, L1024N160, 1024, 160)
70
        testParameterGeneration(t, L2048N224, 2048, 224)
71
        testParameterGeneration(t, L2048N256, 2048, 256)
72
        testParameterGeneration(t, L3072N256, 3072, 256)
73
}
74
 
75
func TestSignAndVerify(t *testing.T) {
76
        var priv PrivateKey
77
        priv.P, _ = new(big.Int).SetString("A9B5B793FB4785793D246BAE77E8FF63CA52F442DA763C440259919FE1BC1D6065A9350637A04F75A2F039401D49F08E066C4D275A5A65DA5684BC563C14289D7AB8A67163BFBF79D85972619AD2CFF55AB0EE77A9002B0EF96293BDD0F42685EBB2C66C327079F6C98000FBCB79AACDE1BC6F9D5C7B1A97E3D9D54ED7951FEF", 16)
78
        priv.Q, _ = new(big.Int).SetString("E1D3391245933D68A0714ED34BBCB7A1F422B9C1", 16)
79
        priv.G, _ = new(big.Int).SetString("634364FC25248933D01D1993ECABD0657CC0CB2CEED7ED2E3E8AECDFCDC4A25C3B15E9E3B163ACA2984B5539181F3EFF1A5E8903D71D5B95DA4F27202B77D2C44B430BB53741A8D59A8F86887525C9F2A6A5980A195EAA7F2FF910064301DEF89D3AA213E1FAC7768D89365318E370AF54A112EFBA9246D9158386BA1B4EEFDA", 16)
80
        priv.Y, _ = new(big.Int).SetString("32969E5780CFE1C849A1C276D7AEB4F38A23B591739AA2FE197349AEEBD31366AEE5EB7E6C6DDB7C57D02432B30DB5AA66D9884299FAA72568944E4EEDC92EA3FBC6F39F53412FBCC563208F7C15B737AC8910DBC2D9C9B8C001E72FDC40EB694AB1F06A5A2DBD18D9E36C66F31F566742F11EC0A52E9F7B89355C02FB5D32D2", 16)
81
        priv.X, _ = new(big.Int).SetString("5078D4D29795CBE76D3AACFE48C9AF0BCDBEE91A", 16)
82
 
83
        testSignAndVerify(t, 0, &priv)
84
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.