diff --git a/apps/macos/VODManager/Sources/VODManager/Services/VODSignature.swift b/apps/macos/VODManager/Sources/VODManager/Services/VODSignature.swift index 5692538..b2436b8 100644 --- a/apps/macos/VODManager/Sources/VODManager/Services/VODSignature.swift +++ b/apps/macos/VODManager/Sources/VODManager/Services/VODSignature.swift @@ -26,6 +26,8 @@ struct VODSignature { let stringToSign = "\(method)&%2F&\(percentEncode(canonicalQuery))" + print("[VODSignature] stringToSign: \(stringToSign)") + guard let keyData = "\(accessKeySecret)&".data(using: .utf8) else { throw VODSignatureError.invalidKey } @@ -40,7 +42,15 @@ struct VODSignature { } private static func percentEncode(_ value: String) -> String { - let allowed = CharacterSet(charactersIn: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.~") - return value.addingPercentEncoding(withAllowedCharacters: allowed) ?? value + let allowed = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.~" + var result = "" + for char in value.utf8 { + if allowed.utf8.contains(char) { + result.append(Character(UnicodeScalar(char))) + } else { + result.append(String(format: "%%%02X", char)) + } + } + return result } }