Documentation ¶
Index ¶
- Variables
- func ByteSliceToUint32Slice(in []byte) []uint32
- func ByteToBits(data []byte) []bool
- func GaussSample() int64
- func IncreaseToNextSquare(num *int)
- func LoadServersCertificates() (credentials.TransportCredentials, error)
- func MathRand() *mrand.Rand
- func MaxBytesLength(in map[int][]byte) int
- func RandInt(mod *big.Int) *big.Int
- func Randate() time.Time
- func Ranstring(n int) string
- func StartBlockProfiling(filename string)
- func StartMemProfiling(filename string)
- func StartProfiling(filename string)
- func StopProfiling()
- func Uint32SliceToByteSlice(in []uint32) []byte
- func VectorToMatrixIndices(i, numColumns int) (int, int)
- type BufPRGReader
- type Config
- type PRGKey
- type PRGReader
- type ParamsLWE
- type Server
Constants ¶
This section is empty.
Variables ¶
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!
var ServerCertificates []tls.Certificate
ServerCertificates holds the certificates for the servers
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 ByteToBits ¶
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 MaxBytesLength ¶
MaxBytesLength get maximal []byte length in map[int][]byte
func Randate ¶
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 StartBlockProfiling ¶
func StartBlockProfiling(filename string)
func StartMemProfiling ¶
func StartMemProfiling(filename string)
func StartProfiling ¶
func StartProfiling(filename string)
func StopProfiling ¶
func StopProfiling()
func Uint32SliceToByteSlice ¶
func VectorToMatrixIndices ¶
Given a vector index returns the indices for the matrix representation of the vector
Types ¶
type BufPRGReader ¶
func NewBufPRG ¶
func NewBufPRG(prg *PRGReader) *BufPRGReader
func (*BufPRGReader) Int63 ¶
func (b *BufPRGReader) Int63() int64
func (*BufPRGReader) Seed ¶
func (b *BufPRGReader) Seed(int64)
func (*BufPRGReader) Uint64 ¶
func (b *BufPRGReader) Uint64() uint64
type Config ¶
func LoadConfig ¶
type PRGKey ¶
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.
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