qcc/internal/identity/number.go
Niko Marmeladkov fc0caf13ef
Initial commit: QuiC Call server
- PoW (Hashcash) authentication
- X.509 CA for phone number certificates (+0 XXX YYY ZZZ)
- QUIC transport (hysteria quic-go fork) with ACME TLS
- Custom append-only DB engine (from NikoGram)
- Call signaling (dial/ring/accept/reject/end)
- E2EE media relay (X25519 + ChaCha20-Poly1305)
- Brutal congestion control (from hysteria)
- Media datagram relay (Opus/VP9/H264/H265)
- Graceful shutdown
2026-06-30 12:38:34 +03:00

40 lines
808 B
Go

package identity
import (
"crypto/rand"
"fmt"
"math/big"
"strings"
)
func GenerateNumber(prefix string) string {
n1 := randInt(100, 999)
n2 := randInt(100, 999)
n3 := randInt(1000, 9999)
return fmt.Sprintf("%s %d %d %d", prefix, n1, n2, n3)
}
func randInt(min, max int) int {
n, _ := rand.Int(rand.Reader, big.NewInt(int64(max-min+1)))
return min + int(n.Int64())
}
func NormalizeNumber(s string) string {
s = strings.TrimSpace(s)
parts := strings.Fields(s)
if len(parts) == 4 && strings.HasPrefix(parts[0], "+") {
return fmt.Sprintf("%s %s %s %s", parts[0], parts[1], parts[2], parts[3])
}
return s
}
func ValidateNumber(s string) bool {
parts := strings.Fields(s)
if len(parts) != 4 {
return false
}
if len(parts[0]) < 2 || parts[0][0] != '+' {
return false
}
return true
}