mirror of
				https://github.com/yggdrasil-network/yggdrasil-go.git
				synced 2025-11-04 03:05:07 +03:00 
			
		
		
		
	it helps to add new files
This commit is contained in:
		
							parent
							
								
									72cca4ea43
								
							
						
					
					
						commit
						038a51fd13
					
				
					 1 changed files with 70 additions and 0 deletions
				
			
		
							
								
								
									
										70
									
								
								src/yggdrasil/version.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								src/yggdrasil/version.go
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,70 @@
 | 
				
			||||||
 | 
					package yggdrasil
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// This file contains the version metadata struct
 | 
				
			||||||
 | 
					// Used in the inital connection setup and key exchange
 | 
				
			||||||
 | 
					// Some of this could arguably go in wire.go instead
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type version_metadata struct {
 | 
				
			||||||
 | 
						meta [4]byte
 | 
				
			||||||
 | 
						ver  uint64 // 1 byte in this version
 | 
				
			||||||
 | 
						// Everything after this point potentially depends on the version number, and is subject to change in future versions
 | 
				
			||||||
 | 
						minorVer uint64 // 1 byte in this version
 | 
				
			||||||
 | 
						box      boxPubKey
 | 
				
			||||||
 | 
						sig      sigPubKey
 | 
				
			||||||
 | 
						link     boxPubKey
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func version_getBaseMetadata() version_metadata {
 | 
				
			||||||
 | 
						return version_metadata{
 | 
				
			||||||
 | 
							meta:     [4]byte{'m', 'e', 't', 'a'},
 | 
				
			||||||
 | 
							ver:      0,
 | 
				
			||||||
 | 
							minorVer: 2,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func version_getMetaLength() (mlen int) {
 | 
				
			||||||
 | 
						mlen += 4            // meta
 | 
				
			||||||
 | 
						mlen += 1            // ver
 | 
				
			||||||
 | 
						mlen += 1            // minorVer
 | 
				
			||||||
 | 
						mlen += boxPubKeyLen // box
 | 
				
			||||||
 | 
						mlen += sigPubKeyLen // sig
 | 
				
			||||||
 | 
						mlen += boxPubKeyLen // link
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (m *version_metadata) encode() []byte {
 | 
				
			||||||
 | 
						bs := make([]byte, 0, version_getMetaLength())
 | 
				
			||||||
 | 
						bs = append(bs, m.meta[:]...)
 | 
				
			||||||
 | 
						bs = append(bs, wire_encode_uint64(m.ver)...)
 | 
				
			||||||
 | 
						bs = append(bs, wire_encode_uint64(m.minorVer)...)
 | 
				
			||||||
 | 
						bs = append(bs, m.box[:]...)
 | 
				
			||||||
 | 
						bs = append(bs, m.sig[:]...)
 | 
				
			||||||
 | 
						bs = append(bs, m.link[:]...)
 | 
				
			||||||
 | 
						if len(bs) != version_getMetaLength() {
 | 
				
			||||||
 | 
							panic("Inconsistent metadata length")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return bs
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (m *version_metadata) decode(bs []byte) bool {
 | 
				
			||||||
 | 
						switch {
 | 
				
			||||||
 | 
						case !wire_chop_slice(m.meta[:], &bs):
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						case !wire_chop_uint64(&m.ver, &bs):
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						case !wire_chop_uint64(&m.minorVer, &bs):
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						case !wire_chop_slice(m.box[:], &bs):
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						case !wire_chop_slice(m.sig[:], &bs):
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						case !wire_chop_slice(m.link[:], &bs):
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return true
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (m *version_metadata) check() bool {
 | 
				
			||||||
 | 
						base := version_getBaseMetadata()
 | 
				
			||||||
 | 
						return base.meta == m.meta && base.ver == m.ver && base.minorVer == m.minorVer
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue