utils

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

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

Go to latest
Published: Oct 19, 2024 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-----
MIIDXjCCAcagAwIBAgIQaQ6ZT/eUnVj3yI0zDmu1zDANBgkqhkiG9w0BAQsFADBl
MR4wHAYDVQQKExVta2NlcnQgZGV2ZWxvcG1lbnQgQ0ExHTAbBgNVBAsMFHNtc2Nv
bG9tQGRlZGlzMjAwMjA0MSQwIgYDVQQDDBtta2NlcnQgc21zY29sb21AZGVkaXMy
MDAyMDQwHhcNMjQxMDEyMTAzMTE0WhcNMjcwMTEyMTEzMTE0WjBEMScwJQYDVQQK
Ex5ta2NlcnQgZGV2ZWxvcG1lbnQgY2VydGlmaWNhdGUxGTAXBgNVBAsMEHNtc2Nv
bG9tQGRlZGlzcGMwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARFOsBHZVaVxg3l
pIxFyzdB8wt+xDB1GOlBYG4ODWvDLWiYfcgcBCQeuhgA2CVGBYqBj7vabgIRMQuA
OPMnlKdoo3YwdDAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEw
HwYDVR0jBBgwFoAUUeNK2y7qWXtNSX1IOwGgvcLIz0wwLAYDVR0RBCUwI4IJbG9j
YWxob3N0hwR/AAABhxAAAAAAAAAAAAAAAAAAAAABMA0GCSqGSIb3DQEBCwUAA4IB
gQCaqdG3+9RlY0EzFgAUXgPwIURehGfP7GzpO92yirRI2eW+spqjZU6RCU3O8THv
1VrzKZ9Y1Pr7uyzHFDR13vlwUwtsyxsXKZibxNRMfLQB8+NUD7N0gdsNQXogxfnx
AbYmRNXLEiasqy43YXwkG4PQoVpyhg2FnsvmYT1MG+vnNXdVxIxT2o6QG2mZyqQA
ro2aKUgAhELSvhj3MknAtjS6mBodvDWonpJASSwd0k2SUkJhAR1ZFO7LhTA19ngo
IcugjTWHigrIGqgC0zTPFZ0hkLk2XAohbAYmDq/rkcP+tlSHzX/Kpj22WuJqNqV/
nTsgO9cEnUpoOZZj04f8o5GmTRdahcoat8g5dH6byjflNMhfaVc8xjnxKFS4hmxS
dznyZ+snVAESTHnmwP0ESHAoCTWJ2ZfTBdD3eYX8XDvHrg/WNHZ4Kga/xay4mIne
bAcmEWStF7BK86q5KJ0XwOaAE/y852/8x1tjAFv7WlUGATcomufYeh2XG9SBLKYd
lmY=
-----END CERTIFICATE-----`,

	`-----BEGIN CERTIFICATE-----
MIIDXzCCAcegAwIBAgIRAK1HOSv/5MtDaGYz9ScwHswwDQYJKoZIhvcNAQELBQAw
ZTEeMBwGA1UEChMVbWtjZXJ0IGRldmVsb3BtZW50IENBMR0wGwYDVQQLDBRzbXNj
b2xvbUBkZWRpczIwMDIwNDEkMCIGA1UEAwwbbWtjZXJ0IHNtc2NvbG9tQGRlZGlz
MjAwMjA0MB4XDTI0MTAxMjEwMzEyMloXDTI3MDExMjExMzEyMlowRDEnMCUGA1UE
ChMebWtjZXJ0IGRldmVsb3BtZW50IGNlcnRpZmljYXRlMRkwFwYDVQQLDBBzbXNj
b2xvbUBkZWRpc3BjMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEvwQL4X3c5p4w
Xlj2mPQ1Lg8eh/KZ5YqN3LJfxyb83jdMTKFK9hq6R94u9r/7esZCH+BtOWhYWLUF
k3RPgykjRKN2MHQwDgYDVR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMB
MB8GA1UdIwQYMBaAFFHjStsu6ll7TUl9SDsBoL3CyM9MMCwGA1UdEQQlMCOCCWxv
Y2FsaG9zdIcEfwAAAYcQAAAAAAAAAAAAAAAAAAAAATANBgkqhkiG9w0BAQsFAAOC
AYEAqQmtAXyq12sdRTGjwIaqfUXWQi9tWB2Ow8CJd5EQLM21A/28OSj99wWAVHf1
4SjVgZilmBep8IV3lPk2sDPXWnEKxXVOAY+7Yae02AnysQ9QNNkk11AeOnPtDRdJ
27jOXeN51S/PM1UMv0EyzC5HyQB3i9UNj0zWGtw1L3PpbzEILVse/UHYla6TR/sS
u0X/h7K885TdxBtmaKdmunNBQU8IaFV6TQ65PNjsmVTTVUTaKJmZ0VyN02zYLPZe
YjQJbnU5TocZpA443YFaobXDLLd1WvBKX4ZbsdzLDMLK2z4IGwmb740Cq/6ipgsr
GvlGy1sUoDgROw636klVsrQIcvP7wh54BT4tyEGaAdAJSujUQ/9ngSSIzuBkB46y
x9JCUZlCggknEfgddiq9/jhFNNdOfF1MMn7Z/Pw7BLjV3kmVgIiS0JVXrsyI47Nw
w5iGkrXP7XsVqt3aQIM1auqIFYpD+w7rFNvMgFGHYE8+uvLuqx2pfFAJnbHHnegQ
jQpX
-----END CERTIFICATE-----`,

	`-----BEGIN CERTIFICATE-----
MIIDXzCCAcegAwIBAgIRAL7Kujfh274p7iv0rllHiqQwDQYJKoZIhvcNAQELBQAw
ZTEeMBwGA1UEChMVbWtjZXJ0IGRldmVsb3BtZW50IENBMR0wGwYDVQQLDBRzbXNj
b2xvbUBkZWRpczIwMDIwNDEkMCIGA1UEAwwbbWtjZXJ0IHNtc2NvbG9tQGRlZGlz
MjAwMjA0MB4XDTI0MTAxMjEwMzEzMFoXDTI3MDExMjExMzEzMFowRDEnMCUGA1UE
ChMebWtjZXJ0IGRldmVsb3BtZW50IGNlcnRpZmljYXRlMRkwFwYDVQQLDBBzbXNj
b2xvbUBkZWRpc3BjMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEsIRBXho07noN
/nu8X9mUgNBLhhARVAioyHifkLoCrQK/6L8KJMEKkmSyLbqwrxCGqgD1lUDWO8Rc
68Ud4Ctr9aN2MHQwDgYDVR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMB
MB8GA1UdIwQYMBaAFFHjStsu6ll7TUl9SDsBoL3CyM9MMCwGA1UdEQQlMCOCCWxv
Y2FsaG9zdIcEfwAAAYcQAAAAAAAAAAAAAAAAAAAAATANBgkqhkiG9w0BAQsFAAOC
AYEAJPHPC19jcAAeHcQ5Jo6mq5eE2CkBwGzzDeKETm037GZDeF0PsQ71IKY0/ckF
Kt07hekhipMY5Zs/A3DikU1DmyA65xZF9a665mFLVDCsfk5u8vO6riWEqEEqN8TV
4quyq0WoVOnZJ2PzOUlZnzuri6XJZHKnrL/KZYkVmETe5XMQ/ySK2Xa/FKN7GAtZ
D0SrTE9gW7ElF0k5MARTe7xkb4JE6XZAqM2SGarjWGYxYE7b4TwJqjuvQ+Uv4UlV
rMb+dwK4YQ9TR7Xu2NmzPnBU+T6IpOSVnqyFJDievShKA8VtjnxYo8rOTwJyHM0O
9xt8d7GJypVapDam6BMBc2u+1GZcrU/B1Q8cNcFiwX9UFVOCUzkDQB7tHpZUNzpY
Q6ZqqG3gYDON8YffVWEHjfellQJtVkTy5bp4zjtUl7O5+pPgXW6I25cONqJRDZBg
InbLWsYFCAeXiD6wWTiru3BQs16lTzBeuYw8DfKZbRsLD0dOWwBo+FvbkPgxz3Ln
5vIL
-----END CERTIFICATE-----`,

	`-----BEGIN CERTIFICATE-----
MIIDXjCCAcagAwIBAgIQJNaBt8xAofmLgfFk3xddDTANBgkqhkiG9w0BAQsFADBl
MR4wHAYDVQQKExVta2NlcnQgZGV2ZWxvcG1lbnQgQ0ExHTAbBgNVBAsMFHNtc2Nv
bG9tQGRlZGlzMjAwMjA0MSQwIgYDVQQDDBtta2NlcnQgc21zY29sb21AZGVkaXMy
MDAyMDQwHhcNMjQxMDEyMTAzMTM3WhcNMjcwMTEyMTEzMTM3WjBEMScwJQYDVQQK
Ex5ta2NlcnQgZGV2ZWxvcG1lbnQgY2VydGlmaWNhdGUxGTAXBgNVBAsMEHNtc2Nv
bG9tQGRlZGlzcGMwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASCjnCXs0D3Gw3+
iRHeU5b/RwlzIPiDdR3yDtziPzNMY8tZBE3fRxFiPtHycIO6Yh4OBqJKfUgzackl
00WPCFrqo3YwdDAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEw
HwYDVR0jBBgwFoAUUeNK2y7qWXtNSX1IOwGgvcLIz0wwLAYDVR0RBCUwI4IJbG9j
YWxob3N0hwR/AAABhxAAAAAAAAAAAAAAAAAAAAABMA0GCSqGSIb3DQEBCwUAA4IB
gQCAk14Y5pPjIVUE4jONQ8D5CknVeojm6VWOdjEJ1xl7uiSXEGdOKGiLTmvd7uq3
alS/ky87PFpdHLMp3GrIMipL4Cu56Z5WawXpnbHkqehxypxcj1QFywCxmRenMGWC
9pacz1pwQMW7ya0cQyp98uW3WwkjQIsxeAUxO7BlMmeb/lvETA00OHx1H0oWYj6m
59k7O9BmfFbYzxOguByt70eSIE4IHrBpLbV3aZp19BgdIXh8tr9HopDEzs10ca3K
YjqLehdN9NAgomjTNDlxWBpkEssstNLzkQAheoUdVxD+/HNlYtGegbfKjltMdvWV
msjp4mm9xtnqd9sMJZ2ufsCD74QrEsF1gS6dLu7wPUBz3rsXzVjRjmQ7MPeja2gS
rHKl+6wYI1pxVoCCwNXkLOSs/sLvJ083yg+mv0VFldTjEcrQzNaZPLFrr3uQSvJx
yP7cuOtf5BMJyJmsWQSQTOsUKYIlFKayjuekXmWqqsyHXNofZQbtaVAc7VZK0Lu5
TTI=
-----END CERTIFICATE-----`,

	`-----BEGIN CERTIFICATE-----
MIIDXjCCAcagAwIBAgIQYPUJQnLRjscwiKPt7XRlgDANBgkqhkiG9w0BAQsFADBl
MR4wHAYDVQQKExVta2NlcnQgZGV2ZWxvcG1lbnQgQ0ExHTAbBgNVBAsMFHNtc2Nv
bG9tQGRlZGlzMjAwMjA0MSQwIgYDVQQDDBtta2NlcnQgc21zY29sb21AZGVkaXMy
MDAyMDQwHhcNMjQxMDEyMTAzMTQ1WhcNMjcwMTEyMTEzMTQ1WjBEMScwJQYDVQQK
Ex5ta2NlcnQgZGV2ZWxvcG1lbnQgY2VydGlmaWNhdGUxGTAXBgNVBAsMEHNtc2Nv
bG9tQGRlZGlzcGMwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQZOF+0AyiK7k10
TCE9WrCG43M53fUkIS25uWzOhvWxGgedLoArZwXplBdYYpB3Bla7HOOqcq30iYk2
BO1GVzjHo3YwdDAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEw
HwYDVR0jBBgwFoAUUeNK2y7qWXtNSX1IOwGgvcLIz0wwLAYDVR0RBCUwI4IJbG9j
YWxob3N0hwR/AAABhxAAAAAAAAAAAAAAAAAAAAABMA0GCSqGSIb3DQEBCwUAA4IB
gQCPvIGz+sU6EE08rrI+hjjEVTijw2NoJOeKp+5YlUtD1k6tEAaYd4ULzI2vTpXN
c9di0jbJ6nnOVPbseCDRz2xQyD2twk+wbZV9cQDeql/38Re8WOv02BVXKOB7Ume5
xYMzSGJGA2zaSMPfO9NmhKaTTbEkyJJRg2LOFjvSCRCg7BJqbrpQJ24DCFfx/WaG
SIrU3HFCk8M4SMmBci6jgMCnSkTiV72ONFsjHVDw9EaiPdfqKYT9quH7gKK4iXXu
wVwvOivz3a0WWpzBWrrtsMbGCsIPbYuDP0a7pwlKCfvv894nTblbXpAYmnjgTK39
Sy70Ugfx/DG/8enWYX17kDrqL38zpXZk/qul1nJn96P0Hue5xe00Qquw7rHeFsuT
9neYS36PYuCcf0yx4ADe2wNu4XirB0pwf+VpvRL7bbi/err31JAY6kUu90L2liWR
KQPTGlp0i+G5sEwqPbjT0FTmXDNEYZx4fykmiBEDe27Tyjsx3LSXXgJjk5gSx0kE
pPY=
-----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