utils

package
v0.0.0-...-7dbb591 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 5, 2023 License: GPL-3.0 Imports: 25 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var SeedMatrixA = [aes.BlockSize]byte{19, 177, 222, 148, 155, 239, 159, 227, 155, 99, 246, 214, 220, 162, 30, 66}

WARNING: DO NOT USE THESE KEYS IN PRODUCTION!

View Source
var ServerCertificates []tls.Certificate

ServerCertificates holds the certificates for the servers

View Source
var ServerPublicKeys = [...]string{
	`-----BEGIN CERTIFICATE-----
MIIDXzCCAcegAwIBAgIRALIZdJxy2Tli+KZ5QpBSqZMwDQYJKoZIhvcNAQELBQAw
ZTEeMBwGA1UEChMVbWtjZXJ0IGRldmVsb3BtZW50IENBMR0wGwYDVQQLDBRzbXNj
b2xvbUBkZWRpczIwMDIwNDEkMCIGA1UEAwwbbWtjZXJ0IHNtc2NvbG9tQGRlZGlz
MjAwMjA0MB4XDTIyMDIwMTE1NTkwMFoXDTI0MDUwMTE0NTkwMFowRDEnMCUGA1UE
ChMebWtjZXJ0IGRldmVsb3BtZW50IGNlcnRpZmljYXRlMRkwFwYDVQQLDBBzbXNj
b2xvbUBkZWRpc3BjMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEPkBREtus5jB3
Qhm9Qip9DELcbNAJnPq0Xd1wkzgWJ3inEwGINUgXGhLcAE6TNJujopA6PQyhhKT3
o4vcl2oqtKN2MHQwDgYDVR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMB
MB8GA1UdIwQYMBaAFFHjStsu6ll7TUl9SDsBoL3CyM9MMCwGA1UdEQQlMCOCCWxv
Y2FsaG9zdIcEfwAAAYcQAAAAAAAAAAAAAAAAAAAAATANBgkqhkiG9w0BAQsFAAOC
AYEAU0sJGm4NJsPUT36bAH8bFANDsrxwGA8NK1vclW/cc82da03THy5yUWmWp03b
8eHtx0HUw6RQXJ5jvFz21GOCXKPiMDNJdpSy1SDxb2LWMiCQSnhvNyIvy/DAqgpd
BsIMyDiwRS2T9SGEzMuD8LxRDR2pJd2mFQ1HU1lZXTyKBB/P5hR9VZEnoCzx7nah
gC4TtAizDN6nPsGrm7eDvonSgXDE30HcYe3zgKD3OHXaocU6Z1qDpkTw4H09hR56
BXyQghHKKCUnz2eAV30JWLotz0PHNp/ZSOqBeqX4cQCkj+i7hotdjVntS5ar5gKW
T+GjB0QpjRfSCNLv9vKvg7EdoniDTC/NUdwj+Zwc+BpgqZdte4z09INO7l3EZNJZ
iJExqP7XM+J2xmBo8RGYFAH25Fgjj4aRRhf4m2AVgk94fFcjx6NaW+Ows6Iph7zH
UCTY2ShIDUBJf5HHByxUqvjZGljUhMmA/e1JI0dZ170S0eXIIbJvXUj6OVJohKtp
HNZ8
-----END CERTIFICATE-----`,

	`-----BEGIN CERTIFICATE-----
MIIDXjCCAcagAwIBAgIQM+PHm/2bQe5/EbQY4CZ0ZDANBgkqhkiG9w0BAQsFADBl
MR4wHAYDVQQKExVta2NlcnQgZGV2ZWxvcG1lbnQgQ0ExHTAbBgNVBAsMFHNtc2Nv
bG9tQGRlZGlzMjAwMjA0MSQwIgYDVQQDDBtta2NlcnQgc21zY29sb21AZGVkaXMy
MDAyMDQwHhcNMjIwMjAxMTU1OTQ5WhcNMjQwNTAxMTQ1OTQ5WjBEMScwJQYDVQQK
Ex5ta2NlcnQgZGV2ZWxvcG1lbnQgY2VydGlmaWNhdGUxGTAXBgNVBAsMEHNtc2Nv
bG9tQGRlZGlzcGMwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASTFTFIkpgzit+7
Q1HuDtewqbr6mPG2nq095d5MwhAqrq7fYsNf7E2d4m5nqWCvEXdT1tQujeaeyUgj
lZXglM17o3YwdDAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEw
HwYDVR0jBBgwFoAUUeNK2y7qWXtNSX1IOwGgvcLIz0wwLAYDVR0RBCUwI4IJbG9j
YWxob3N0hwR/AAABhxAAAAAAAAAAAAAAAAAAAAABMA0GCSqGSIb3DQEBCwUAA4IB
gQAznHJOIX1xw58S6aEGCixOjw32eV7E3vAkClGU0gs/j0iXJyvCa0fd+QpFumFp
U42vIh7vaJVzq7nSMlcKZMRrwZ1rzD8do/QXl907LgAt0sqngQDewxqvWp/lIlAO
7u9lwniCZcmUSDWY0sQcUvOolcKNi3wmdm2k0EbV9YPjNw3PWdlb411h+zo0Ssta
5nJekTpwbaXgFAVMwhjwhWPtqL3yCOjfzh0z7G5fHsmFFXfuAFgNwpcC4l9FhujX
UQvJFd7g/cMQrp456kFWfBIrGR463rdUQVldZY73H+fHfzf8c1gVES61Ojt4fifF
abs4PoNxWToCzl05hKSZrql7c0l2z4qvKE8BMqO34NCFWpr2Ete6mcSJixZQ3a8m
fMX8nYLVchcxrpO4+e8MwyXVizcGWEiBXmymrF+r8Oy1JMg6tdqWRw1Op2KWE7qb
wWyThpwb5w45FmiC2DEDMnpOFfb24vQvM4W79WmstC/H+a/Zaxp3n1OLf2odeveF
z9A=
-----END CERTIFICATE-----`,

	`-----BEGIN CERTIFICATE-----
MIIDXjCCAcagAwIBAgIQRGpv7VB+GIOJUa9SqMOFcTANBgkqhkiG9w0BAQsFADBl
MR4wHAYDVQQKExVta2NlcnQgZGV2ZWxvcG1lbnQgQ0ExHTAbBgNVBAsMFHNtc2Nv
bG9tQGRlZGlzMjAwMjA0MSQwIgYDVQQDDBtta2NlcnQgc21zY29sb21AZGVkaXMy
MDAyMDQwHhcNMjIwODAzMTQwNDUwWhcNMjQxMTAzMTUwNDUwWjBEMScwJQYDVQQK
Ex5ta2NlcnQgZGV2ZWxvcG1lbnQgY2VydGlmaWNhdGUxGTAXBgNVBAsMEHNtc2Nv
bG9tQGRlZGlzcGMwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASG878VsbRvKilX
UtRQVoCrK0Lz05rO7rTFWMMwWlO6RnYGxLSBw64QyYIdl7wYqC2utcwCi0erH9oq
KNdp8bm7o3YwdDAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEw
HwYDVR0jBBgwFoAUUeNK2y7qWXtNSX1IOwGgvcLIz0wwLAYDVR0RBCUwI4IJbG9j
YWxob3N0hwR/AAABhxAAAAAAAAAAAAAAAAAAAAABMA0GCSqGSIb3DQEBCwUAA4IB
gQBwWbLhUnGIYuqj+KQlue4siR2rrcpPDjaZnYCO1CMsIpEtDX/f5xAOONifey1O
4FTpsoJLDUzj2DP4dbcEl9ACUsog+VybjsdYXYF9KqbcR9+gSwfp09/2GdtTJAaj
i+TyI031ZLgkdc5SZ9oWJ0kMyT64H2xIzzjf+cF6sochshofD/xsqWGXkscgG+Ya
V8qToN4TpG0zpIFmBTE0BQQucqYwZA6rXtkjXRpYbcI+sbewNXzU+TFDNBrk1xrg
VbN/x5SoZ9oCbxgy2GKJl1i10Y1URWHP9CxsgUmh+LrgNv/DHZemD1HAZ/3Iynl+
U2ov7m20/SIcyFHEp6Zq9VXRlnN0aNUHpkPgZkomjjlrP/MXLItNRfQklH4w7Hi+
YmlVDd6xpR6iECVxO1QMy2hjuB9woxd66xX2nB8YPst4EQlX7f61Icam6E1pRmhG
4914ghRfHeYHh6I0V1FnOTdeQ6X41vBiRHLdIRwTTInSxGNd78f07DB6NZt9lUcz
y8Y=
-----END CERTIFICATE-----`,

	`-----BEGIN CERTIFICATE-----
MIIDXjCCAcagAwIBAgIQGqmFXxfwIQiOxnNE98mfszANBgkqhkiG9w0BAQsFADBl
MR4wHAYDVQQKExVta2NlcnQgZGV2ZWxvcG1lbnQgQ0ExHTAbBgNVBAsMFHNtc2Nv
bG9tQGRlZGlzMjAwMjA0MSQwIgYDVQQDDBtta2NlcnQgc21zY29sb21AZGVkaXMy
MDAyMDQwHhcNMjIwODAzMTQwNjQzWhcNMjQxMTAzMTUwNjQzWjBEMScwJQYDVQQK
Ex5ta2NlcnQgZGV2ZWxvcG1lbnQgY2VydGlmaWNhdGUxGTAXBgNVBAsMEHNtc2Nv
bG9tQGRlZGlzcGMwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAROTK2hqX2fILaz
4A1LgtdVwb7ta7TQ3OKIZRqLvwj14iN/vHHLhioqH6M6w1YuIVkBsd0rR/Ev4RVB
m5NSzsyno3YwdDAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEw
HwYDVR0jBBgwFoAUUeNK2y7qWXtNSX1IOwGgvcLIz0wwLAYDVR0RBCUwI4IJbG9j
YWxob3N0hwR/AAABhxAAAAAAAAAAAAAAAAAAAAABMA0GCSqGSIb3DQEBCwUAA4IB
gQAO1SRnOwlpRNmW7e+XbJwjzWrk0vRPcJn+F9yVQLt+BFrILLTN/3goUJVp7yti
pzmsoVCuEmVPWf68V1poiaGBI2Eb/M6X+RrJ53tYL7FSRScaaLZAXpxWslVdYR9Q
1ZOOWzJ2xRgqUx6U45tRJCZy3SpDyqxnAkU5kxQxvzsGKgOlaNl11ujPu6SCeWWQ
YC4ZkDkNFaWz4csCa2FX5dy7stPJURQUycObHybDTYyEsdcITKgTKHPiCXWT+wZW
DR/wUUtGewmcT+miK6gCNVtuIx1tL/MuMfR/zHyyIubsoeGofJB7CI1x51MtrViY
bmbArBaWRVxJN5r1dGumyn3mmUudsJLoGvaQ/pxdYKzO3FBBDXnOUXGmS0eH1TPU
OtWA1PEXTVTPSw7SunHDlLGSj2MEd1LiH9/aJROf6k5A8CRvetflONJ0e5k/7On2
iuutoRYY5mO1g+TUhi8bvUrYWrVX0qDXfUB6u5IxsqU0T1r0y34fxyCyKjubIYZX
HdI=
-----END CERTIFICATE-----`,

	`-----BEGIN CERTIFICATE-----
MIIDXzCCAcegAwIBAgIRAJduQ7ESvpzGuFQGKrHqsXkwDQYJKoZIhvcNAQELBQAw
ZTEeMBwGA1UEChMVbWtjZXJ0IGRldmVsb3BtZW50IENBMR0wGwYDVQQLDBRzbXNj
b2xvbUBkZWRpczIwMDIwNDEkMCIGA1UEAwwbbWtjZXJ0IHNtc2NvbG9tQGRlZGlz
MjAwMjA0MB4XDTIyMDgwMzE0MDgxNFoXDTI0MTEwMzE1MDgxNFowRDEnMCUGA1UE
ChMebWtjZXJ0IGRldmVsb3BtZW50IGNlcnRpZmljYXRlMRkwFwYDVQQLDBBzbXNj
b2xvbUBkZWRpc3BjMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE2o5+4V8HA2F0
0ZOgAjuDr+VoPWNT8F6w4GDZvfIyGz0pQhuT2x8PMYmZ7k25By89d7zFORSVyy7h
bLyPmqPJ26N2MHQwDgYDVR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMB
MB8GA1UdIwQYMBaAFFHjStsu6ll7TUl9SDsBoL3CyM9MMCwGA1UdEQQlMCOCCWxv
Y2FsaG9zdIcEfwAAAYcQAAAAAAAAAAAAAAAAAAAAATANBgkqhkiG9w0BAQsFAAOC
AYEAAxRs9PmsiO6LhSuU1P18kciduHAFeYfxvZrjqfETSwBDlSkXs+jQ1lHBIc88
noN9dzs4pNQ8FzTvAJYTR4JzCI63FPHlZmQH01yApc/nzH0VIfglh/m+WNc2Gsj8
JF71NV2BXxiqsoDArglrbcj0JgR8AVbtBztR4XM0l2p75SJ7TmXbfYZNlFzpnKXr
bjC02R1/JnhxfzrxCYpJ0Nj5easULZd31YZ+Doj/B2H5Qo058dNxsyxBXl9enNX7
h49YLtxNw9k7MfHaETW2Md323qRxU+qPUoouznhwQmoIBuusWcCvoyA7dDeZIuSR
5gZsiremQZ6YfgFPr2195I/55tuquNNbNShh7wT52a+BBBGrW2sSs5xB18vpDcEt
O39YCFxAheZsFfUNsF/aw43rNkvPCfAnUqy2orLudS6rkVph1rq3elD5VbzawKra
H0yLwVJyBdob081hNWkLkzESeuwlmYWbwMBFwj9NhsqX9IP0WX6c2TcTVh3uDw6g
aOYE
-----END CERTIFICATE-----`,
}

Functions

func ByteSliceToUint32Slice

func ByteSliceToUint32Slice(in []byte) []uint32

func ByteToBits

func ByteToBits(data []byte) []bool

func GaussSample

func GaussSample() int64

The function below is modeled on Martin Albrecht's discrete-Gaussian sampler included in his dgs library:

https://github.com/malb/dgs

func IncreaseToNextSquare

func IncreaseToNextSquare(num *int)

Increase num to the next perfect square. If the square root is a whole number, do not modify anything. Otherwise, return the square of the square root + 1.

func LoadServersCertificates

func LoadServersCertificates() (credentials.TransportCredentials, error)

func MathRand

func MathRand() *mrand.Rand

func MaxBytesLength

func MaxBytesLength(in map[int][]byte) int

MaxBytesLength get maximal []byte length in map[int][]byte

func RandInt

func RandInt(mod *big.Int) *big.Int

Produce a random integer in Z_p where mod is the value p.

func Randate

func Randate() time.Time

source: https://stackoverflow.com/questions/43495745/how-to-generate-random-date-in-go-lang/43497333 this is probably biased, but we don't care since it is only for tests

func Ranstring

func Ranstring(n int) string

func StartBlockProfiling

func StartBlockProfiling(filename string)

func StartMemProfiling

func StartMemProfiling(filename string)

func StartProfiling

func StartProfiling(filename string)

func StopProfiling

func StopProfiling()

func Uint32SliceToByteSlice

func Uint32SliceToByteSlice(in []uint32) []byte

func VectorToMatrixIndices

func VectorToMatrixIndices(i, numColumns int) (int, int)

Given a vector index returns the indices for the matrix representation of the vector

Types

type BufPRGReader

type BufPRGReader struct {
	mrand.Source64
	Key PRGKey
	// contains filtered or unexported fields
}

func NewBufPRG

func NewBufPRG(prg *PRGReader) *BufPRGReader

func (*BufPRGReader) Int63

func (b *BufPRGReader) Int63() int64

func (*BufPRGReader) RandInt

func (b *BufPRGReader) RandInt(mod *big.Int) *big.Int

func (*BufPRGReader) Seed

func (b *BufPRGReader) Seed(int64)

func (*BufPRGReader) Uint64

func (b *BufPRGReader) Uint64() uint64

type Config

type Config struct {
	Servers map[string]Server

	Addresses []string
}

func LoadConfig

func LoadConfig(configFile string) (*Config, error)

type PRGKey

type PRGKey [aes.BlockSize]byte

func GetDefaultSeedMatrixA

func GetDefaultSeedMatrixA() *PRGKey

func RandomPRGKey

func RandomPRGKey() *PRGKey

type PRGReader

type PRGReader struct {
	Key PRGKey
	// contains filtered or unexported fields
}

We use the AES-CTR to generate pseudo-random numbers using a stream cipher. Go's native rand.Reader is extremely slow because it makes tons of system calls to generate a small number of pseudo-random bytes.

We pay the overhead of using a sync.Mutex to synchronize calls to AES-CTR, but this is relatively cheap.

func NewPRG

func NewPRG(key *PRGKey) *PRGReader

func RandomPRG

func RandomPRG() *PRGReader

func (*PRGReader) Read

func (s *PRGReader) Read(p []byte) (int, error)

type ParamsLWE

type ParamsLWE struct {
	P     uint32  // plaintext modulus
	N     int     // lattice/secret dimension
	Sigma float64 // Error parameter

	L int    // number of rows of database
	M int    // number of columns of database
	B uint32 // bound used in reconstruction

	SeedA    *PRGKey // matrix  used to generate digest
	BytesMod int     // bytes of the modulo
}

func ParamsDefault

func ParamsDefault() *ParamsLWE

func ParamsDefault128

func ParamsDefault128() *ParamsLWE

func ParamsWithDatabaseSize

func ParamsWithDatabaseSize(rows, columns int) *ParamsLWE

func ParamsWithDatabaseSize128

func ParamsWithDatabaseSize128(rows, columns int) *ParamsLWE

type Server

type Server struct {
	Index int
	IP    string
	Port  int
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL