macOS 8bitdo キーボード マッピング変更

8BitDo macOS Default KeySets

先日、家にあったダンボールを整理していたときに、随分前に買った 8bitdoというゲームコントローラーを発掘しました。この8bitdo キーボードとしてBluetooth接続できるものです。macOS以外にもWindows やAndroid / iOSにも対応しているようです。

8bitdo
8bitdo

新品でまったく使っていませんでしたが、macOS Montereyで試したところキーボードとして認識できました。説明書も何も捨ててなかったのですが (恐らく後継機)Zero2の説明書がサイトにありました。[SELECT]を長押しするとBluetoothベアリングできました。

https://download.8bitdo.com/Manual/Controller/Zero2/Zero2_Manual.pdf

8bitdo Select Button
8bitdo Select Button
8bitdoはキーボードとしてmacOS Montereyで認識できました。
8bitdoはキーボードとしてmacOS Montereyで認識できました。
8bitdo macOS MontereyでBluetoothペアリング成功

再接続するには、Bボタンを押しながらスタートボタンを押すmacOS用キーボードで接続できます。

macOS キーボード接続

キーボードマッピングは下のようになっています。

8bitdo デフォルトキー
8bitdo デフォルトキー

このままだと、使う用途もないのでmacOS側でキーマッピング変換します。

Karabiner-Elementsアプリ でキーマッピング

Karabiner-Elementsというキーマッピング変換できるアプリがあるのでそれを使います。

githabにSourceが上がっているので勉強にもなります

https://github.com/pqrs-org/Karabiner-Elements

Karabiner-Elements設定画面
Karabiner-Elements設定画面

Karabiner-Elementsアプリは、デバイスごとに設定を変えることができます。

キーマッピングを変えたのに普通のキーボードには影響しない

いろんな用途で利用できそうです

Swift5 HMAC SHA256 Base64 Signatureを作る方法

Swift5 HMAC SHA256 Base64 Signatureを作る方法

Swift5を使った、HMAC SHA256 Signatureを実装方法をサイトで調べると「CryptoSwiftを使え」的なことが書かれています。世間は、cocoapodなどのユーザーライブラリに頼ってしまう傾向があります。

HMAC SHA256を利用したSignatureはPythonやJava・C#すべて標準のライブラリが利用できます。

HMAC SHA256は最近流行りのQR決済ペイメントで利用されていて、その他多くのサービスのAuthenticationとして利用されていると思います。そのような標準的な方式なのに、Swiftの標準ライブラリで実現できないはずはないと思いました。

調査すると、https://github.com/soffes/Cryptoここのソースが参考になりました。

CommonCryptoと云う標準のライブラリを使ってHMAC SHA256実装できました。

Swift5を使った下記コード例は、11行程度なのでスマートに実装できます。

import CommonCrypto
import Foundation

public struct HMAC {
    public static func hmacsha256Base64(message: String, secretKey: String) -> String{
        guard let dMessage:Data = message.data(using: .utf8), let dSecret: Data = secretKey.data(using: .utf8)
        else { return "" }
        let signature = UnsafeMutablePointer<CUnsignedChar>.allocate(capacity: Int(CC_SHA256_DIGEST_LENGTH))
        defer { signature.deallocate() } //最後にメモリー開放
        dMessage.withUnsafeBytes { dataBytes in
            dSecret.withUnsafeBytes { keyBytes in
                CCHmac(CCHmacAlgorithm(kCCHmacAlgSHA256), keyBytes.baseAddress, dSecret.count, dataBytes.baseAddress, dMessage.count, signature)
            }
        }
        return Data(bytes: signature, count: Int(CC_SHA256_DIGEST_LENGTH)).base64EncodedString()
    }
}

上記コードではbase64で返したいので最後にbase64EncodedString()しています。

使い方は下記コード例です

let signature = HMAC.hmacsha256Base64(message: "メッセージ", secretKey: "secret12345")
print(signature)

signature変数には、「FgN4UUeea4/rUuLymDOULjCwHtTlCerHAq60ZvZeJdM=」が入っていました。PythonでのHMAC SHA256で確認すると同じ値でした

iOSで試していませんが macOSならこれで十分です。

2022 MJELD TECHNOLOGIES. ALL RIGHTS RESERVED