Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
quant
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
danet
quant
Commits
885b3307
Commit
885b3307
authored
2 years ago
by
Martin Stiemerling
Committed by
Malte Bauch
1 year ago
Browse files
Options
Downloads
Patches
Plain Diff
Add poer on and off functionality
parent
80308fb5
No related branches found
No related tags found
1 merge request
!1
Move proto kms into ekms
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
internal/kms/kms.go
+2
-1
2 additions, 1 deletion
internal/kms/kms.go
internal/quantumlayer/quantumlayer-emu-prng.go
+49
-30
49 additions, 30 deletions
internal/quantumlayer/quantumlayer-emu-prng.go
internal/quantumlayer/quantumlayer.go
+3
-1
3 additions, 1 deletion
internal/quantumlayer/quantumlayer.go
with
54 additions
and
32 deletions
internal/kms/kms.go
+
2
−
1
View file @
885b3307
...
@@ -69,7 +69,8 @@ func (kms *EKMS) AddQuantumElement(kmsUDPAddrr string) *QuantumElement {
...
@@ -69,7 +69,8 @@ func (kms *EKMS) AddQuantumElement(kmsUDPAddrr string) *QuantumElement {
//Get an emulated Quantumlayer
//Get an emulated Quantumlayer
ql
:=
quantumlayer
.
NewQuantumlayerEmuPRNG
()
ql
:=
quantumlayer
.
NewQuantumlayerEmuPRNG
()
ql
.
PowerOn
(
kmsUDPAddrr
)
ql
.
Configure
(
kmsUDPAddrr
)
ql
.
PowerOn
()
ksl
:=
kmsKeyStore
{
ksl
:=
kmsKeyStore
{
keyStore
:
make
(
map
[
string
]
kmsKSElement
),
keyStore
:
make
(
map
[
string
]
kmsKSElement
),
...
...
This diff is collapsed.
Click to expand it.
internal/quantumlayer/quantumlayer-emu-prng.go
+
49
−
30
View file @
885b3307
...
@@ -29,11 +29,13 @@ type QuantumPayloadElement struct {
...
@@ -29,11 +29,13 @@ type QuantumPayloadElement struct {
}
}
type
QuantumlayerEmuPRNG
struct
{
type
QuantumlayerEmuPRNG
struct
{
configured
bool
poweron
bool
poweron
bool
incomingRandNums
chan
QuantumPayloadElement
incomingRandNums
chan
QuantumPayloadElement
outgoingRandNums
chan
QuantumPayloadElement
outgoingRandNums
chan
QuantumPayloadElement
peerNumbers
*
NumberStore
peerNumbers
*
NumberStore
myNumbers
*
NumberStore
myNumbers
*
NumberStore
localQLAddress
string
udpSrvConn
*
net
.
UDPConn
udpSrvConn
*
net
.
UDPConn
qlPeer
string
qlPeer
string
qlPeerCancel
context
.
CancelFunc
qlPeerCancel
context
.
CancelFunc
...
@@ -43,6 +45,7 @@ type QuantumlayerEmuPRNG struct {
...
@@ -43,6 +45,7 @@ type QuantumlayerEmuPRNG struct {
func
NewQuantumlayerEmuPRNG
()
(
newql
*
QuantumlayerEmuPRNG
)
{
func
NewQuantumlayerEmuPRNG
()
(
newql
*
QuantumlayerEmuPRNG
)
{
return
&
QuantumlayerEmuPRNG
{
return
&
QuantumlayerEmuPRNG
{
configured
:
false
,
poweron
:
false
,
poweron
:
false
,
incomingRandNums
:
make
(
chan
QuantumPayloadElement
),
incomingRandNums
:
make
(
chan
QuantumPayloadElement
),
outgoingRandNums
:
make
(
chan
QuantumPayloadElement
),
outgoingRandNums
:
make
(
chan
QuantumPayloadElement
),
...
@@ -52,31 +55,41 @@ func NewQuantumlayerEmuPRNG() (newql *QuantumlayerEmuPRNG) {
...
@@ -52,31 +55,41 @@ func NewQuantumlayerEmuPRNG() (newql *QuantumlayerEmuPRNG) {
}
}
}
}
// Power on the quantum layer, i.e., open up the communication ports for the
// Configure the quantum emulation, but do not start if yet
// other quantum module
func
(
qlemuprng
*
QuantumlayerEmuPRNG
)
Configure
(
localQLAddress
...
string
)
{
func
(
qlemuprng
*
QuantumlayerEmuPRNG
)
PowerOn
(
localQLAddress
...
string
)
{
qlemuprng
.
poweron
=
false
log
.
Println
(
"QuantumlayerEmuPRNG is powering on...charging."
)
// Start receiving numberstores
// Start receiving numberstores
go
qlemuprng
.
peerNumbers
.
receiveNumbers
(
qlemuprng
.
incomingRandNums
)
go
qlemuprng
.
peerNumbers
.
receiveNumbers
(
qlemuprng
.
incomingRandNums
)
go
qlemuprng
.
myNumbers
.
receiveNumbers
(
qlemuprng
.
outgoingRandNums
)
go
qlemuprng
.
myNumbers
.
receiveNumbers
(
qlemuprng
.
outgoingRandNums
)
// Determine if a local UDP address should be used or not
if
len
(
localQLAddress
)
==
0
{
// No input
qlemuprng
.
localQLAddress
=
":0"
}
else
{
qlemuprng
.
localQLAddress
=
localQLAddress
[
0
]
}
qlemuprng
.
configured
=
true
}
// Power on the quantum layer, i.e., open up the communication ports for the
// other quantum module
func
(
qlemuprng
*
QuantumlayerEmuPRNG
)
PowerOn
()
{
if
qlemuprng
.
configured
==
false
{
// nothing do here move on
log
.
Printf
(
"Sorry, the quantum layer is not configured for action. You've missed Configure()"
)
return
}
qlemuprng
.
poweron
=
false
log
.
Println
(
"QuantumlayerEmuPRNG is powering on...charging."
)
// serve UDP incoming
// serve UDP incoming
go
func
()
{
go
func
()
{
// Get UDP server part going...
// Get UDP server part going...
// Determine if a local UDP address should be used or not
log
.
Printf
(
"localQLAddress is %s"
,
qlemuprng
.
localQLAddress
)
var
udpAddrString
string
if
len
(
localQLAddress
)
==
0
{
// No input
udpAddrString
=
":0"
}
else
{
udpAddrString
=
localQLAddress
[
0
]
}
log
.
Printf
(
"localQLAddress is %s"
,
localQLAddress
[
0
])
// This reads random numbers from other Quantum end
// This reads random numbers from other Quantum end
udpSrvPort
,
err
:=
net
.
ResolveUDPAddr
(
"udp"
,
udpAddrString
)
udpSrvPort
,
err
:=
net
.
ResolveUDPAddr
(
"udp"
,
qlemuprng
.
localQLAddress
)
if
err
!=
nil
{
if
err
!=
nil
{
log
.
Fatalf
(
"QuantumlayerEmuPRNG UDP failure: %s"
,
err
)
log
.
Fatalf
(
"QuantumlayerEmuPRNG UDP failure: %s"
,
err
)
return
return
...
@@ -158,23 +171,25 @@ func (qlemuprng *QuantumlayerEmuPRNG) AddPeer(addr net.UDPAddr) {
...
@@ -158,23 +171,25 @@ func (qlemuprng *QuantumlayerEmuPRNG) AddPeer(addr net.UDPAddr) {
case
<-
ctx
.
Done
()
:
case
<-
ctx
.
Done
()
:
return
return
default
:
default
:
// retrieve a new back of random numbers
if
qlemuprng
.
poweron
==
true
{
newNumberBatch
:=
qlemuprng
.
GenerateRandomNumbers
()
// retrieve a new back of random numbers
// TODO: Replace this by some generic encapsulation reader and not just JSON
newNumberBatch
:=
qlemuprng
.
GenerateRandomNumbers
()
//Get JSON for transmission ready
// TODO: Replace this by some generic encapsulation reader and not just JSON
qpe
:=
QuantumPayloadElement
{
time
.
Now
()
.
UnixNano
(),
len
(
newNumberBatch
),
&
newNumberBatch
}
//Get JSON for transmission ready
qpe
:=
QuantumPayloadElement
{
time
.
Now
()
.
UnixNano
(),
len
(
newNumberBatch
),
&
newNumberBatch
}
// XXX/TODO: error must be handled
jsonPayload
,
err
:=
json
.
Marshal
(
qpe
)
// XXX/TODO: error must be handled
if
err
!=
nil
{
jsonPayload
,
err
:=
json
.
Marshal
(
qpe
)
log
.
Printf
(
"json.Marshal error %s"
,
err
)
if
err
!=
nil
{
}
log
.
Printf
(
"json.Marshal error %s"
,
err
)
}
_
,
_
,
err
=
qlemuprng
.
udpSrvConn
.
WriteMsgUDPAddrPort
(
jsonPayload
,
nil
,
addr
.
AddrPort
())
_
,
_
,
err
=
qlemuprng
.
udpSrvConn
.
WriteMsgUDPAddrPort
(
jsonPayload
,
nil
,
addr
.
AddrPort
())
if
err
!=
nil
{
if
err
!=
nil
{
log
.
Fatalf
(
"WriteMsgUDPAddrPort failed: %s"
,
err
)
log
.
Fatalf
(
"WriteMsgUDPAddrPort failed: %s"
,
err
)
}
qlemuprng
.
outgoingRandNums
<-
qpe
}
}
qlemuprng
.
outgoingRandNums
<-
qpe
time
.
Sleep
(
5
*
time
.
Second
)
time
.
Sleep
(
5
*
time
.
Second
)
}
}
}
}
...
@@ -223,6 +238,10 @@ func (qlemuprng *QuantumlayerEmuPRNG) GetKeyBatchLocal() (QuantumLayerBulkKey, e
...
@@ -223,6 +238,10 @@ func (qlemuprng *QuantumlayerEmuPRNG) GetKeyBatchLocal() (QuantumLayerBulkKey, e
return
qlemuprng
.
myNumbers
.
GetBulk
()
return
qlemuprng
.
myNumbers
.
GetBulk
()
}
}
func
(
qlemuprng
*
QuantumlayerEmuPRNG
)
GetStatus
()
(
poweredOn
bool
)
{
return
qlemuprng
.
poweron
}
type
NumberStore
struct
{
type
NumberStore
struct
{
mu
sync
.
Mutex
mu
sync
.
Mutex
maxBytes
int
maxBytes
int
...
...
This diff is collapsed.
Click to expand it.
internal/quantumlayer/quantumlayer.go
+
3
−
1
View file @
885b3307
...
@@ -11,8 +11,10 @@ type QuantumLayerBulkKey struct {
...
@@ -11,8 +11,10 @@ type QuantumLayerBulkKey struct {
}
}
type
QuantumLayer
interface
{
type
QuantumLayer
interface
{
PowerOn
(
...
string
)
// switch on the quantum layer element
Configure
(
...
string
)
// configure the interface, e.g., used IP/Port config if emulated
PowerOn
()
// switch on the quantum layer element
PowerOff
()
// switch off the quantum layer element
PowerOff
()
// switch off the quantum layer element
GetStatus
()
(
poweredOn
bool
)
// returns true if quantum layer element is powered on
AddPeer
()
// Adds a Quantum Layer Peer to the peer list
AddPeer
()
// Adds a Quantum Layer Peer to the peer list
RemovePeer
()
// Remmoves a Quantum Layer Peer to the peer list
RemovePeer
()
// Remmoves a Quantum Layer Peer to the peer list
GetLocalQLPort
()
// Returns the information about the local quantum layer IP and port
GetLocalQLPort
()
// Returns the information about the local quantum layer IP and port
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment