Project Moscato Team Messaging Middleware Implemetation Message Middleware by Golang Operate as Secure, Effectively
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

secure.go 2.0KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package modules
  2. import (
  3. "fmt"
  4. "strconv"
  5. )
  6. // 키관리 부분, 노드 입력받고 키 반환하는 부분 구현
  7. type Security struct{
  8. KeyMap map[string] string
  9. }
  10. func NewSecurity() *Security{
  11. security := &Security{map[string] string{}}
  12. return security
  13. }
  14. type SecurityManager interface {
  15. RegKey(ksm KeyShareMsg)
  16. GetNodeKey(message Message) int64
  17. ReEncrypt(fromKey int64, toKey int64, target []int64) []int64
  18. CompareTopic(topic1 []int64, topic2 []int64) int
  19. CompareDigit(topic1 int64, topic2 int64) int
  20. CompareAlpha(topic1 []int64, topic2 []int64) int
  21. }
  22. /**
  23. keyShareMsg 에서 각 노드의 private 키를 받아 keyMap 에 저장
  24. */
  25. func (sc Security) RegKey(ksm KeyShareMsg) {
  26. sc.KeyMap[ksm.Message.From()] = ksm.key
  27. }
  28. /**
  29. 각 노드의 키를 주소를 이용하여 맵에서 가져옴
  30. */
  31. func (sc Security) GetNodeKey(message Message) int64{
  32. messageStringKey := sc.KeyMap[message.From()]
  33. mKey, err := strconv.ParseInt(messageStringKey, 10,64)
  34. if err != nil {
  35. fmt.Println("reEncrypt Error: key string to int64 parsing error.")
  36. }
  37. return mKey
  38. }
  39. /**
  40. reEncrypt 해서 슬라이스 반환
  41. */
  42. func (sc Security) ReEncrypt(fromKey int64, toKey int64, target []int64) []int64{
  43. for index := range target {
  44. target[index] = target[index] - fromKey + toKey
  45. }
  46. return target
  47. }
  48. /**
  49. Compare 함수들은 같으면 0 다르면 -1 (비교가 필요한 경우 오름차순 1 내림차순 -1)
  50. */
  51. func (sc Security) CompareTopic(topic1 []int64, topic2 []int64) int {
  52. for i := 0; i< len(topic2); i++ {
  53. if topic1[i] != topic2[i] {
  54. return -1
  55. }
  56. }
  57. return 0
  58. }
  59. func (sc Security) CompareDigit(topic1 int64, topic2 int64) int {
  60. if topic1 < topic2 {
  61. return 1
  62. } else if topic1 > topic2 {
  63. return -1
  64. }
  65. return 0
  66. }
  67. func (sc Security) CompareAlpha(topic1 []int64, topic2 []int64) int {
  68. for i := 0; i< len(topic2); i++ {
  69. if topic1[i] != topic2[i] {
  70. return -1
  71. }
  72. }
  73. return 0
  74. }
  75. // private key 생성 메세지
  76. //func (sc Security) keyGenPrivate() KeyGenMsg{
  77. //
  78. //}