| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- package modules
-
- import (
- "fmt"
- "strconv"
- )
-
- // 키관리 부분, 노드 입력받고 키 반환하는 부분 구현
- type Security struct{
- KeyMap map[string] string
- }
-
- func NewSecurity() *Security{
- security := &Security{map[string] string{}}
- return security
- }
-
- type SecurityManager interface {
- RegKey(ksm KeyShareMsg)
- GetNodeKey(message Message) int64
- ReEncrypt(fromKey int64, toKey int64, target []int64) []int64
- CompareTopic(topic1 []int64, topic2 []int64) int
- CompareDigit(topic1 int64, topic2 int64) int
- CompareAlpha(topic1 []int64, topic2 []int64) int
- }
-
- /**
- keyShareMsg 에서 각 노드의 private 키를 받아 keyMap 에 저장
- */
- func (sc Security) RegKey(ksm KeyShareMsg) {
- sc.KeyMap[ksm.Message.From()] = ksm.key
- }
-
- /**
- 각 노드의 키를 주소를 이용하여 맵에서 가져옴
- */
- func (sc Security) GetNodeKey(message Message) int64{
-
- messageStringKey := sc.KeyMap[message.From()]
- mKey, err := strconv.ParseInt(messageStringKey, 10,64)
- if err != nil {
- fmt.Println("reEncrypt Error: key string to int64 parsing error.")
- }
- return mKey
- }
-
- /**
- reEncrypt 해서 슬라이스 반환
- */
- func (sc Security) ReEncrypt(fromKey int64, toKey int64, target []int64) []int64{
- for index := range target {
- target[index] = target[index] - fromKey + toKey
- }
-
- return target
- }
-
-
- /**
- Compare 함수들은 같으면 0 다르면 -1 (비교가 필요한 경우 오름차순 1 내림차순 -1)
- */
- func (sc Security) CompareTopic(topic1 []int64, topic2 []int64) int {
- for i := 0; i< len(topic2); i++ {
- if topic1[i] != topic2[i] {
- return -1
- }
- }
- return 0
- }
-
- func (sc Security) CompareDigit(topic1 int64, topic2 int64) int {
- if topic1 < topic2 {
- return 1
- } else if topic1 > topic2 {
- return -1
- }
- return 0
- }
-
- func (sc Security) CompareAlpha(topic1 []int64, topic2 []int64) int {
- for i := 0; i< len(topic2); i++ {
- if topic1[i] != topic2[i] {
- return -1
- }
- }
- return 0
- }
-
-
-
-
- // private key 생성 메세지
- //func (sc Security) keyGenPrivate() KeyGenMsg{
- //
- //}
|