static function getInstance()
    {
        $driver = static::getLibrary();

        try {
            $instance = new $driver();
        } catch (\Exception $e) {
            throw new Exception('Unable to create an instance of ' . $driver);
        }

        if (!self::isInstanceOf($instance, CryptInterface::class)) {
            throw new Exception(Exception::MSG_INVALID_ARG, ['driver', CryptInterface::class]);
        }

        return $instance;
    }