Skip to content

Instantly share code, notes, and snippets.

View astrokin's full-sized avatar
💭
always say yes

Alexey Strokin astrokin

💭
always say yes
View GitHub Profile
extension AnalyticsEvent: TrackingEvent {
var trackingName: String {
MirroringHelper.name(from: self)
}
var trackingAttributes: [String: String] {
MirroringHelper.attributes(from: self)
}
}
@astrokin
astrokin / AESHelper.swift
Created April 22, 2022 12:11
PKCS5.PBKDF
import CryptoSwift
static func decrypt(_ base64String: String, passwordUtf8: String) throws -> String {
let salt = Array<UInt8>.init(hex: String(base64String.prefix(32)))
let key = try PKCS5.PBKDF2(password: passwordUtf8.bytes, salt: salt, iterations: 100, keyLength: 16, variant: .md5).calculate()
let iv = Array<UInt8>.init(hex: String(base64String.prefix(64).suffix(32)))
let aes = try AES(key: key, blockMode: CBC(iv: iv), padding: .pkcs7)
let stringToDecrypt = String(base64String.suffix(base64String.count - 64))
@astrokin
astrokin / AESHelper.swift
Created April 22, 2022 12:08
Decrypt on iOS (CBC, Pkcs7, EVP_BytesToKey)
static func decrypt(_ base64String: String, passwordUtf8: String) throws -> String {
let encrypted = Data(base64Encoded: base64String)!
let salt = [UInt8](encrypted[8 ..< 16])
let evp = try EVP_KDF_Util.generate_evp_kdf_aes256cbc_key_iv(pass: passwordUtf8, saltData: salt) // key + iv
let aes = try AES(key: Array<UInt8>.init(hex: evp.0),
blockMode: CBC(iv: Array<UInt8>.init(hex: evp.1)),
padding: .pkcs7)
let data = [UInt8](encrypted[16 ..< encrypted.count])
let decrypted = try aes.decrypt(data)
@astrokin
astrokin / EVP_KDF_Util.swift
Created April 22, 2022 12:06
Decrypt on iOS (CBC, Pkcs7, EVP_BytesToKey)
public class EVP_KDF_Util {
public class func generate_evp_kdf_aes256cbc_key_iv(pass: String, saltData: [UInt8]) throws -> (String, String) {
let passData = [UInt8](pass.data(using: .utf8)!)
let keySize: Int = 32
let keyPointer = UnsafeMutablePointer<UInt8>.allocate(capacity: keySize)
keyPointer.initialize(repeating: 0, count: keySize)
@astrokin
astrokin / EVP_KDF_Salted.m
Created April 22, 2022 12:04
Decrypt on iOS (CBC, Pkcs7, EVP_BytesToKey) (C part)
#include "EVP_KDF_Salted.h"
#include <openssl/evp.h>
#include <string.h>
int
gen_evp_kdf_aes256cbc(const unsigned char *password, const unsigned char *salt, unsigned char key[], unsigned char iv[]) {
const EVP_CIPHER *cipher;
const EVP_MD *dgst = NULL;
@astrokin
astrokin / AESHelper.kt
Created April 22, 2022 11:59
Decrypt on Android (CBC, Pkcs7, EVP_BytesToKey)
object AESHelper {
private const val KEY_SIZE = 256
private const val IV_SIZE = 128
private const val HASH_CIPHER = "AES/CBC/PKCS7Padding"
private const val AES = "AES"
private const val KDF_DIGEST = "MD5"
@Throws(GeneralSecurityException::class)
fun decryptCryptoJS(password: String, cipherText: String): String {
@astrokin
astrokin / clear_cache
Created January 3, 2022 18:44
iOS developer clear disk usage cache
#!/bin/bash
killall Xcode
echo 'Xcode process killed'
xcrun -k
echo 'Remove the cache. Causes all values to be re-cached'
xcodebuild -alltargets clean
echo 'clean all targets'
rm -rf "$(getconf DARWIN_USER_CACHE_DIR)/org.llvm.clang/ModuleCache"
echo 'ModuleCache removed'
rm -rf "$(getconf DARWIN_USER_CACHE_DIR)/org.llvm.clang.$(whoami)/ModuleCache"
@astrokin
astrokin / CVPixelBufferPixelFormatNames.swift
Created October 21, 2019 17:09 — forked from skyebook/CVPixelBufferPixelFormatNames.swift
Easily get the pixel format name of a CVPixelBuffer
public func CVPixelBufferGetPixelFormatName(pixelBuffer: CVPixelBuffer) -> String {
let p = CVPixelBufferGetPixelFormatType(pixelBuffer)
switch p {
case kCVPixelFormatType_1Monochrome: return "kCVPixelFormatType_1Monochrome"
case kCVPixelFormatType_2Indexed: return "kCVPixelFormatType_2Indexed"
case kCVPixelFormatType_4Indexed: return "kCVPixelFormatType_4Indexed"
case kCVPixelFormatType_8Indexed: return "kCVPixelFormatType_8Indexed"
case kCVPixelFormatType_1IndexedGray_WhiteIsZero: return "kCVPixelFormatType_1IndexedGray_WhiteIsZero"
case kCVPixelFormatType_2IndexedGray_WhiteIsZero: return "kCVPixelFormatType_2IndexedGray_WhiteIsZero"
case kCVPixelFormatType_4IndexedGray_WhiteIsZero: return "kCVPixelFormatType_4IndexedGray_WhiteIsZero"
struct Security {
static func isJailbroken() -> Bool {
guard let cydiaUrlScheme = NSURL(string: "cydia://package/com.example.package") else { return false }
if UIApplication.shared.canOpenURL(cydiaUrlScheme as URL) {
return true
}
#if arch(i386) || arch(x86_64)
// This is a Simulator not an idevice
// Complete the isBalanced function below.
func isBalanced(s: String) -> String {
let openBrackets = "{([".replacingOccurrences(of: "", with: "")
let closeBrackets = "})]"
let brackets = ["]": "[", ")": "(", "}": "{"]
guard s.count > 1 else {
return "NO"
}
guard !closeBrackets.contains(s.first!) else { return "NO" }